最近,我决定将pm2作为服务运行我的应用程序。对我来说pm2 start app.mjs
将应用程序作为服务运行,但是pm2似乎无法正确运行我的快速应用程序。我使用express npm构建了这样的应用程序:
//Imports
import express from "express";
//Setups
const app = express();
const port = process.env.PORT;
app.get("/", async (req, res) => {
res.send("Hello world!");
});
//Running server
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
也尝试了pm2 start ./bin/www
的操作,该错误给了我一个Script not found
的错误,express-generator
似乎还可以,而不是与应用程序一起使用Express npm。应用程序可以在开发人员模式(node app.mjs
)下正常运行。
更新
我在Konstantinos Lamogiannis的帮助下解决了这个问题。设置配置文件和答案后,我将app.mjs
更改为app.js
的形式,将import
样式更改为const variable = require("");
,这解决了我的问题。我不知道为什么会这样,但是pm2
npm可能与支持import
ES6语法的新nodejs功能发生冲突。
pm2日志给了我这个错误:unhandledRejection您可能已经忘了赶上Promise拒绝!
答案 0 :(得分:2)
您可以尝试在项目的根文件夹中创建一个名称为ecosystem.config.js
的文件,然后在文件中添加以下代码:
module.exports = {
apps: [{
name: 'yourAppName',
script: 'bin/www/app.mjs', // the path of the script you want to execute,
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
instances: 1,
autorestart: true,
watch: false,
error_file: 'err.log',
out_file: 'out.log',
log_file: 'combined.log',
time: true,
env: {
},
}],
};
在上面的配置中,您会注意到在脚本属性中,其值为bin / www / app.mjs。我假设您在bin / www目录下有app.mjs并放置了该值。
然后运行pm2-runtime start ecosystem.config.js
编辑#1
假设启动文件位于项目的根目录中,请使用script: 'app.mjs'
。
因此,您最终的ecosystem.config.js
将是:
module.exports = {
apps: [{
name: 'yourAppName',
script: 'app.mjs', // the path of the script you want to execute,
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
instances: 1,
autorestart: true,
watch: false,
error_file: 'err.log',
out_file: 'out.log',
log_file: 'combined.log',
time: true,
env: {
},
}],
};
然后尝试从根项目目录(位于app.mjs所在的位置)pm2-runtime start ecosystem.config.js
。