无法使用pm2启动节点进程

时间:2018-05-14 15:33:52

标签: node.js

我是node.js的新手,并且难以使用pm2妖魔化this应用。 当我转到/srv/myapp并运行yarn start时该应用运行正常,但当我尝试通过转到/srv/myapp并运行pm2 start index.js

来妖魔化它时

我看到这个过程似乎已经开始了:

[PM2] Starting /srv/myapp/index.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem       │ user │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ index    │ 0  │ fork │ 14528 │ online │ 0       │ 0s     │ 0%  │ 16.0 MB   │ root │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

但是前端没有响应(相反,我得到502 errors并且节点服务器没有按预期侦听端口3000fuser 3000/tcp 没有返回结果)。

这里有什么问题?我该如何解决?

2 个答案:

答案 0 :(得分:1)

通过以下命令检查pm2日志:<ion-nav-bar> </ion-nav-bar> <ion-view> <ion-nav-title align-title="center"> <div style="float:none;width:100%;text-align:center;" class="whipsterTitle">APP REGISTRATION</div> </ion-nav-title> <ion-nav-bar-button> </ion-nav-bar-button> <ion-content> ... </ion-content> </ion-view> 如果没有错误,则说明您的应用没有问题。

答案 1 :(得分:0)

pm2使用节点启动您的应用,一个问题是它没有提供任何日志记录或输出,例如通过其他方式启动应用(例如node index.js),所以它没有&#如果出现任何问题,请告诉您。

我始终认为在node之前使用pm2开始测试您的应用是个不错的主意。

鉴于node index.js会导致错误:import bb from 'bluebird';SyntaxError: Unexpected token import,这听起来好像您正在使用ES6导入功能not supported by Node by default。我怀疑Yarn要么启用这些功能,要么将ES6代码转换为ES5,以便在执行yard start时运行Node,但我不熟悉Yarn要知道。

可能是您指向了错误的文件,并且已经创建了一个已编译的文件dist.js(已作为示例)Yarn正在使用不透明的start快乐地运行命令。

修改:查看来源后,它似乎正在使用something called babel-node。请参阅start script in the package.json

"scripts": {
  "start": "babel-node index.js",

pm2不知道用这个babel节点的东西运行你的index.js,即使它确实babel-node强烈建议你不要在生产中使用babel-node(可能是你正在使用pm2):

  

不适合生产使用   你不应该在生产中使用babel-node。由于高速缓存存储在存储器中,因此存储器使用率很高,这是不必要的。您还将始终遇到启动性能损失,因为整个应用程序需要动态编译。

     

使用Babel查看示例Node.js服务器,了解如何在生产部署中使用Babel。

还有关于ES6模块加载的说明:

  

ES6样式的模块加载可能无法按预期运行   由于技术限制,在&gt; babel节点REPL中不完全支持ES6样式的模块加载。

我强烈建议你添加一个build脚本来制作一个&#39;发行版&#39;转换版本与babel并部署!

"scripts": {
  "start": "babel-node index.js",
  "build": "babel index.js --out-file index-dist.js

或者沿着这些方向行动,然后运行yarn build(或yarn run build?),然后pm2 start index-dist.js