Nextjs 路由在部署到 Azure 应用服务 Linux 实例时不起作用

Nextjs Routes are not working when deployed to Azure App Service Linux Instance

我想使用 Linux 个实例将 nextjs 应用部署到 Azure 应用服务。

我按照此处的说明操作:https://developinjay.com/deploying-nextjs-app-to-azure-app-service-linux-77a43353e761 该应用已在此处 https://interviewramp.azurewebsites.net and https://interviewramp.herokuapp.com 上线。 路由在 Heroku 中工作。因此,如果用户转到此处 https://interviewramp.herokuapp.com/books/interviewramp/introduction,它就可以工作。 路线在 Azure 应用服务中不起作用。因此,如果用户转到此处 https://interviewramp.azurewebsites.net/books/interviewramp/introduction,我会收到 404 文档未找到错误,这意味着代码正在尝试在 Azure 中提供 introduction.html 文件并返回 404,因为没有 html 文件那。

当我 npm 运行 start 或 npm 运行 dev 时,所有链接都在本地工作。 像这样将 url 粘贴到浏览器会得到 404 : https://interviewramp.azurewebsites.net/login

我从未在我的代码中进行过下一次导出。我想知道你是否可以帮助我?

下面是我的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}`);
  });
});

我能够解决这个问题,我将留下这个答案以防它对其他人有帮助。 Azure Web 应用现在显示正确的路径。我在 Azure 的启动命令中使用 node server.js 而不是 next start,它解决了这个问题。