Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法使用PM2创建节点脚本群集_Node.js_Typescript_Pm2_Node Cluster - Fatal编程技术网

Node.js 无法使用PM2创建节点脚本群集

Node.js 无法使用PM2创建节点脚本群集,node.js,typescript,pm2,node-cluster,Node.js,Typescript,Pm2,Node Cluster,我试图用PM2创建节点脚本集群,但出现了错误,并且无法工作 typescript中的主节点脚本 import express from 'express'; import mongoose from 'mongoose'; const app = express(); app.get('/', (req, res) => { const tickets = {}; res.send(tickets); }); const setup = async () =>

我试图用PM2创建节点脚本集群,但出现了错误,并且无法工作

typescript中的主节点脚本

import express from 'express';
import mongoose from 'mongoose';

const app = express();

app.get('/', (req, res) => {
    const tickets = {};
    res.send(tickets);
});

const setup = async () => {
    console.clear();

    try {
        await mongoose.connect('mongodb://127.0.0.1:27017/tickets', {
            useNewUrlParser: true, 
            useUnifiedTopology: true,
            useCreateIndex: true
        });
    } catch(err) {
        console.log(err);
    } 

    app.listen(5001, () => {
        console.log('listing app on 5001');
    });
}

setup();
NPM运行脚本

ts-node-dev --poll index.ts
我的PM2启动脚本process.json

{
    "apps" : [
        {
            "name"       : "main-server",
            "script"     : "npm start",
            "autorestart": true,
            "instances"  : 4,
            "exec_mode"  : "cluster"            
        }
    ]
}
和得到错误

SyntaxError: Invalid or unexpected token
3|main-ser |     at wrapSafe (internal/modules/cjs/loader.js:1047:16)
3|main-ser |     at Module._compile (internal/modules/cjs/loader.js:1097:27)
3|main-ser |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
3|main-ser |     at Module.load (internal/modules/cjs/loader.js:977:32)
3|main-ser |     at Function.Module._load (internal/modules/cjs/loader.js:877:14)
3|main-ser |     at /usr/local/lib/node_modules/pm2/lib/ProcessContainer.js:303:25
3|main-ser |     at wrapper (/usr/local/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16)
3|main-ser |     at next (/usr/local/lib/node_modules/pm2/node_modules/async/waterfall.js:96:20)
3|main-ser |     at /usr/local/lib/node_modules/pm2/node_modules/async/internal/onlyOnce.js:12:16
3|main-ser |     at WriteStream.<anonymous> (/usr/local/lib/node_modules/pm2/lib/Utility.js:186:13)
SyntaxError:无效或意外标记
包装袋处的3 |主服务器(内部/modules/cjs/loader.js:1047:16)
3 |主服务器| at模块编译(internal/modules/cjs/loader.js:1097:27)
3 | main ser | at Object.Module._extensions..js(internal/modules/cjs/loader.js:1153:10)
3 |主服务器|位于Module.load(内部/modules/cjs/loader.js:977:32)
3 |主服务器| at功能模块|加载(内部/modules/cjs/loader.js:877:14)
3 | main ser | at/usr/local/lib/node_modules/pm2/lib/ProcessContainer.js:303:25
3 | main ser | at wrapper(/usr/local/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16)
3 |主服务器|在下一个(/usr/local/lib/node|u modules/pm2/node|u modules/async/falter.js:96:20)
3 | main ser | at/usr/local/lib/node|u modules/pm2/node|u modules/async/internal/onlynce.js:12:16
3 |主服务器|位于写入团队。(/usr/local/lib/node_modules/pm2/lib/Utility.js:186:13)

当我使用单个实例“ts node dev--poll index.ts”运行direct命令时,它可以很好地使用once实例运行。但在PM2集群模式下,它不工作,应用程序也不加载

我认为问题在于您正在尝试使用PM2运行typescript代码。我自己从来没有试过,但很明显PM2有一个好办法。如果这不起作用,您可以自己传输代码,然后通过PM2运行它。我认为您必须以不同的方式调用主脚本文件。不久前,我尝试运行一个进程文件。在花了很多时间之后,它不知怎么地对我起了作用。尝试使用此配置:

{
    "apps" : [
        {
            "name": "main-server",
            "script": "./index.ts",
            "node_args": [
                "ts-node-dev",
                "--poll"
            ],
            "autorestart": true,
            "instances": 4,
            "exec_interpreter": "node",
            "exec_mode": "cluster",
            "env": {
                "NODE_ENV": "development"
            },
            "env_production": {
                "NODE_ENV": "production"
            }
        }
    ]
}
  • script
    正在调用文件,而不是npm命令
  • 参数在
    节点参数中给出
  • exec\u解释器
    节点
    或整个路径,例如
    /usr/bin/nodejs
  • 不确定,但在任何地方阅读定义
    env
    都很重要
使用pm2 start process.json在dev模式下运行它 带有pm2 start process.json的产品模式--env production


没有测试。祝您好运。

您的命令如何使用pm2运行?pm2 start process.json[process.json命令已添加在问题中]是,它正在工作。我已将exec_解释器直接更改为ts代码