发送对象作为参数分叉nodejs进程
有fork('./MyProcess.js',['foo']);
在主进程和console.log(process.argv[2]);
在分叉的过程中将login到我的控制台。
然而, fork('./MyProcess.js',[{myProp : 'bar'}]);
在主进程和console.log(process.argv[2]); console.log(process.argv[2].myProp);
console.log(process.argv[2]); console.log(process.argv[2].myProp);
在分叉的过程中会logging[对象对象] (如预期),但未定义的第二个日志。
为什么是这样,我该怎么做才能获得理想的行为?
将对象(json)通过commadlineparameter passing给subprocess不是一个好主意,命令参数需要先转义(不容易)。 你有一些select:
- hex编码JSON然后传递给subprocess,这个工作但你的subprocess接口是坏的。
- 保存JSON到一个文件,而不是传递文件path。
- 通过stdin将json传递给subprocess。
- 将json作为消息发送给subprocess,请参阅https://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle_options_callback
正如child_process.fork的文档中所述 :
child_process.fork(modulePath [,args] [,options])
args
string参数列表
通过执行fork('./MyProcess.js',[{myProp : 'bar'}])
,您正在传递一个string所在的对象。 由此产生的行为可能成为实现相关的,但我在Node.js v6.1.0的试验表明,该对象将被转换为string“[对象对象]”。 该string将不具有myProp
属性,从而产生未定义的。
解决scheme是只传递string:
fork('./MyProcess.js', ['bar']);
如果您关心命名参数,只需简单地格式化它们(请参阅下文),然后使用另一个包(如yargs
)或您自己的解决schemeparsing它们。 在这种情况下,你可以这样做:
fork('./MyProcess.js', ['--myProp=bar']);
为了完整性,你可以在“MyProcess.js”中有这个:
var argv = require('yargs').argv; console.log('My prop is: ' + argv.myProp);