Quería implementar una aplicación nextjs en Azure App Service con una instancia de Linux.
Seguí las instrucciones aquí: https://developinjay.com/deploying-nextjs-app-to-azure-app-service-linux-77a43353e761 La aplicación está activa aquí https://interviewramp.azurewebsites.net y https:// entrevistaramp.herokuapp.com . Las rutas funcionan en Heroku. Entonces, si el usuario va aquí https://interviewramp.herokuapp.com/books/interviewramp/introduction , funciona. Las rutas no funcionan en el servicio de aplicaciones de Azure. Por lo tanto, si el usuario va aquí https://interviewramp.azurewebsites.net/books/interviewramp/introduction , aparece el error 404 documento no encontrado, lo que significa que el código está tratando de servir un archivo de introducción.html en Azure y devuelve 404 porque no hay ningún archivo html como ese.
Todos los enlaces funcionan localmente cuando npm run start o npm run dev. Pegar una URL como esta en el navegador da 404: https://interviewramp.azurewebsites.net/login
Nunca he hecho la siguiente exportación en mi código. Me preguntaba si podrías ayudarme.
A continuación se muestra mi server.js
const express = require('express'); const session = require('express-session'); const mongoSessionStore = require('connect-mongo'); const next = require('next'); const api = require('./api'); require('dotenv').config(); const dev = process.env.NODE_ENV !== 'production'; const MONGO_URL = dev ? process.env.MONGO_URL_TEST : process.env.MONGO_URL; const port = process.env.PORT || 8000; const ROOT_URL = getRootUrl(); const URL_MAP = { '/login': '/public/login', '/my-books': '/customer/my-books', }; const app = next({ dev }); const handle = app.getRequestHandler(); app.prepare().then(async () => { const server = express(); server.use(helmet({ contentSecurityPolicy: false })); server.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); next(); }); server.use(express.json()); // give all Nextjs's request to Nextjs server server.get('/_next/*', (req, res) => { handle(req, res); }); api(server); routesWithSlug({ server, app }); server.get('*', (req, res) => { const url = URL_MAP[req.path]; if (url) { app.render(req, res, url); } else { handle(req, res); } }); server.listen(port, (err) => { if (err) throw err; logger.info(`> Ready on ${ROOT_URL}`); }); });Pude resolver este problema y dejo esta respuesta en caso de que sea útil para alguien más. La aplicación web de Azure ahora muestra las rutas correctas. node server.js en lugar de next start en mi comando de inicio en Azure y solucionó el problema.