You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PM2启动Node.js应用指定端口报错:未知选项`--port`

解决pm2启动Node.js应用时unknown option '--port'的报错

嘿,我来帮你搞定这个问题!你遇到的error: unknown option '--port',本质原因是你的Node.js应用代码并没有处理--port这个命令行参数——pm2确实把--port=1336传递给了你的应用,但Node.js本身不知道这个参数是什么,所以抛出了错误。

下面给你两种可行的解决方案,根据你的应用情况选择:

方案1:修改应用代码,支持命令行参数接收端口

如果你的应用目前没有处理命令行参数,需要在app.js里添加逻辑来解析--port参数。

原生Node.js方式(无需额外依赖)

直接通过process.argv提取端口:

// 在app.js的服务器启动代码前添加
const defaultPort = 3000;
// 从命令行参数中提取--port的值
const portArg = process.argv.find(arg => arg.startsWith('--port='));
const port = portArg ? Number(portArg.split('=')[1]) : defaultPort;

// 然后用这个port启动服务器(以Express为例)
const express = require('express');
const app = express();

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

修改完代码后,再执行你原来的命令:

pm2 start app.js -i 0 -- --port=1336

用第三方库更规范地处理参数(推荐)

如果需要处理更多命令行参数,建议用yargscommander这类库,示例用yargs

  1. 先安装依赖:
npm install yargs
  1. 修改app.js
const yargs = require('yargs/yargs')(process.argv.slice(2));
const argv = yargs
  .option('port', {
    type: 'number',
    default: 3000,
    describe: 'Server listening port'
  })
  .parse();

const express = require('express');
const app = express();

app.listen(argv.port, () => {
  console.log(`Server running on port ${argv.port}`);
});

方案2:用环境变量传递端口(无需修改代码,若应用支持)

很多Node.js应用(比如Express默认项目)会自动读取PORT环境变量,这种情况下你根本不用传--port参数,直接用环境变量启动即可:

PORT=1336 pm2 start app.js -i 0

对应的,你的app.js里只需要这样写就能自动识别端口:

const port = process.env.PORT || 3000;
app.listen(port, ...);

你可以先检查下你的应用代码里有没有读取process.env.PORT,有的话直接用方案2更简单!

内容的提问来源于stack exchange,提问作者Rahul Kumar

火山引擎 最新活动