2016-05-18 8 views
1

fork('./MyProcess.js',['foo']);をメインプロセスに、console.log(process.argv[2]);をforkしたプロセスにfooをコンソールに記録します。forked nodejsプロセスのパラメータとしてオブジェクトを送信

しかし、二股処理の主な工程におけるfork('./MyProcess.js',[{myProp : 'bar'}]);console.log(process.argv[2]); console.log(process.argv[2].myProp);は、第二ログの[対象オブジェクト](予想通り)が、未定義を記録します。

なぜこれが問題なのですか?

child_process.fork(のModulePath [、引数] [、オプション])

args一覧引数

することにより、文字列の:child_process.forkのドキュメントに記載されているように

+0

を参照して、子プロセスにメッセージとしてJSONを送る[ 'child_process.fork'(https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)は'の文字列の配列を期待args'を使用していますが、オブジェクトを含む配列を提供しています。 –

答えて

4

パスオブジェクト(JSON)子プロセスにではありません良いアイデア、コマンドの引数を最初にエスケープする必要があります(容易ではない)。

  1. 16進数でjsonをエンコードし、子プロセスに渡しますが、これは機能しますが、子プロセスインターフェイスは不良です。
  2. ファイルにjsonを保存し、代わりにファイルパスを渡します。
  3. stsonを使用して子プロセスにjsonを渡します。
  4. https://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle_options_callback
+0

ありがとう、私はすでに他のシナリオでそれをやっているので、メッセージとして送信します。 – Jonah

2

fork('./MyProcess.js',[{myProp : 'bar'}])を実行すると、文字列が必要な場所にオブジェクトを渡しています。結果としての動作は実装に依存するかもしれませんが、Node.js v6.1.0での試行は、オブジェクトが文字列 '[object Object]'に変換されることを示しています。文字列はmyPropプロパティを持たないので、未定義です。

ソリューションは、文字列のみを渡すことです:

fork('./MyProcess.js', ['bar']); 

名前付きパラメータを気にした場合、単純にそれから(例えばyargsなど)別のパッケージまたは溶液でそれらを解析し、(下記参照)、それらを適切にフォーマットしますあなた自身の。この場合は、あなたがこれを行うことができます:完全性については

fork('./MyProcess.js', ['--myProp=bar']); 

を、あなたは「MyProcess.js」でこれを持っている可能性があり:commadline引数を通じて

var argv = require('yargs').argv; 
console.log('My prop is: ' + argv.myProp); 
関連する問題