2016-05-18 62 views
1

在主進程中有fork('./MyProcess.js',['foo']);,並且在分叉進程中有console.log(process.argv[2]);將記錄foo到我的控制檯。將對象作爲參數發送到分支節點進程

然而,fork('./MyProcess.js',[{myProp : 'bar'}]);在主處理和console.log(process.argv[2]); console.log(process.argv[2].myProp);在叉形過程將記錄[對象的對象](如預期),但未定義用於第二日誌。

這是爲什麼,我該怎麼做才能得到想要的行爲?

+0

['child_process.fork'](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)期望的字符串爲'的陣列args',但是你提供了一個包含對象的數組。 –

回答

4

通行證對象(JSON)到子進程不一個好主意,命令參數需要先逃脫(不容易)。你有一些選擇:

  1. 十六進制編碼的json然後傳遞給子進程,這個工程,但你的子進程接口是壞的。
  2. 將json保存到文件中,而不是傳遞文件路徑。
  3. 通過標準輸入將json傳遞給子進程。
  4. 發送JSON作爲消息發送到子進程,見https://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle_options_callback
+0

謝謝,我會將它作爲一條消息發送,因爲我在其他一些場景中已經這樣做了。 – Jonah

2

作爲child_process.fork文檔中所述:

child_process.fork(ModulePath進行[,參數] [,選項])

列表的

args參數

通過在做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); 
相關問題