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