发送对象作为参数分叉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:

  1. hex编码JSON然后传递给subprocess,这个工作但你的subprocess接口是坏的。
  2. 保存JSON到一个文件,而不是传递文件path。
  3. 通过stdin将json传递给subprocess。
  4. 将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);