找不到bin / www的PM2脚本

时间:2020-04-04 18:21:51

标签: node.js express pm2

最近,我决定将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拒绝!

1 个答案:

答案 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