【问题标题】:PM2 launching on wrong port for NextJS appPM2 在 NextJS 应用程序的错误端口上启动
【发布时间】:2018-08-20 11:54:38
【问题描述】:

我有 package.json 脚本如下:

"scripts": {
  "build": "NODE_ENV=production next build",
  "startLocal": "NODE_ENV=production node server.js",
  "startServer": "NODE_ENV=production pm2 start server.js",
}

现在,我的应用使用 NextJS 和自定义 Express 服务器。 server.js 看起来有点像这样:

const { parse } = require('url');
const express = require('express');
const next = require('next');

const env = process.env.NODE_ENV || 'development';
const port = parseInt(process.env.PORT, 10) || 3000;
const app = next({ dev: env === 'development' });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.get('*', (req, res) => {
    handle(req, res, parse(req.url, true));
  });

  server.listen(port, (err) => {
    if (err) throw err;
    console.info(`> Ready on port ${port}`);
  });
});

为了构建我的应用程序,我首先运行 npm run build。然后我在特定端口号PORT=3030 npm run startLocal 上启动应用程序。这按预期工作。但是,当我使用脚本启动 PM2 PORT=3030 npm run startServer 时,它不会获取端口号并在端口 3000 上启动。

这是为什么?我还需要在 package.json 脚本中的 PM2 命令中添加其他内容吗?

【问题讨论】:

    标签: javascript node.js pm2 next.js


    【解决方案1】:

    pm2 只了解环境变量 NODE_PORT(不是 PORT),所以我认为您需要使用 PORT=3030 NODE_PORT=3030 npm run startServer 以便它传递给 next 和 pm2。

    【讨论】:

    • 像 API_KEY 这样的不同变量呢?
    • 如果我理解正确,您可以在执行脚本之前添加尽可能多的环境变量(这就是您通过 npm run startServer 所做的),因此您可以添加 API_KEY=XXXX PORT=3030 NODE_PORT=3030 npm run startServer
    猜你喜欢
    • 2015-05-13
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2020-10-07
    • 2021-06-20
    • 2020-03-18
    • 2016-06-11
    相关资源
    最近更新 更多