分叉时,节点child_process传递argv

时间:2018-01-16 16:38:00

标签: node.js express child-process

我有Express服务器的Node应用程序。我在服务器文件夹中也有节点脚本。在某些事件中,我需要从单独的节点脚本中获取数据,因此我创建了子进程。

没有争论一切正常,但我需要从父进程传递一些数据。

var express = require('express');
var router = express.Router();
var child_process = require('child_process');

router.get('/:site/start', function(req, res, next) {
        const basedir = req.app.get('basedir');
        const child_script_path = basedir + '/scripts/script.js';
        const child_argv = [
            '--slowmo=0',
            '--headless=1'
        ];

        child = child_process.fork(child_script_path, {
            execArgv: child_argv
        });

        ...
    }
});

当我尝试传递争论并通过Express运行脚本时,会显示以下错误:

/home/user/.nvm/versions/node/v8.9.4/bin/node: bad option: --slowmo=0
/home/user/.nvm/versions/node/v8.9.4/bin/node: bad option: --headless=1

但是当我从命令行运行脚本时,如:

node /scripts/script.js --slowmo=0 --headless=1

我没有错误,脚本可以从命令行捕获args。

在这种情况下如何将args传递给子脚本?

Ubuntu 16.04
节点8.9.4
快递4.15.5

1 个答案:

答案 0 :(得分:2)

execArgv选项用于传递执行过程的参数,而不是脚本 这对于将特定执行环境传递给分叉进程非常有用。

如果要将参数传递给脚本,则应使用args child_process.fork(modulePath[, args][, options])

示例:

const child_process = require('child_process');

const child_script_path = './script.js';
const child_argv = [
  '--foo',
  '--bar'
]
const child_execArgv = [
  '--use-strict'
]

let child = child_process.fork(child_script_path, child_argv, {
  execArgv: child_execArgv  // script.js will be executed in strict mode
})

// script.js
console.log(process.argv[2], process.argv[3])  // --foo --bar