我有一个在 Node.js 上运行的基于 Express.js 的应用程序。
现在,我想用 pm2 来结束它。为此,我定义了 ecosystem.json:
{
"apps": [
{
"env": {
"NODE_ENV": "development",
"PORT": "3000"
},
"env_production": {
"NODE_ENV": "production"
},
"exec_mode": "cluster",
"instances": 0,
"name": "myapp",
"node_args": [
"--experimental-json-modules",
"--gc_interval=100",
"--max_old_space_size=512",
"--optimize_for_size"
],
"script": "./src/server/bin/www.mjs",
"watch": true
}
]
}
在 package.json 中,我指定了一个
scripts
部分:
"scripts": {
"start": "pm2 start ecosystem.json"
},
在 IDE 中,我配置了 npm 脚本运行配置:
现在,当我单击时,pm2 启动并显示正确的运行进程摘要:
但是,当我尝试在浏览器中打开应用程序(
127.0.0.1:3000
或 localhost:3000
)时,我得到 ERR_CONNECTION_REFUSED
,无法访问此网站。
看起来,该应用程序不再监听端口 3000。
我如何才能访问在 pm2 中运行的应用程序?
附注基于 Nodejs + expressjs - pm2 和永远不起作用?,我检查过,我运行
"script": "./src/server/bin/www.mjs"
,所以我假设,pm2 获得了 bin/www.mjs
的正确路径。
更详细地探索该案例后,我在控制台中得到
ERR_UNSUPPORTED_ESM_URL_SCHEME
。问题的根源在PM2一方。问题是目前 "exec_mode": "cluster"
不起作用,而 "exec_mode": "fork"
可以毫无问题地使用。
由于某种原因,这个问题已被关闭并解决,而事实上修复似乎尚未发布。