У меня проблема с модулем дочернего процесса, особенно с child.spawn и child.fork. Я полагаюсь на документацию child_process.fork, в которой говорится:
Это особый случай функции child_process.spawn() для нереста Node.js процессов. В дополнение к тому, что все методы в обычный экземпляр ChildProcess, возвращаемый объект имеет связь канальный встроенный. Подробнее см. Child.send(message, [sendHandle]).
Я упростил мою проблему ниже:
parent.js:
var cp = require('child_process');
var n = cp.fork('./child.js');
n.send({a:1});
//n.stdout.on('data',function (data) {console.log(data);});
n.on('message', function(m) {
console.log("Received object in parent:");
console.log( m);
});
child.js:
process.on('message', function(myObj) {
console.log('myObj received in child:');
console.log(myObj);
myObj.a="Changed value";
process.send(myObj);
});
process.stdout.write("Msg from child");
Как и ожидалось. Выход:
Msg from child
myObj received in child:
{ a: 1 }
Received object in parent:
{ a: 'Changed value' }
Я хочу, чтобы он работал с прокомментированной строкой в parent.js uncommented. Другими словами, я хочу поймать stdout в дочернем процессе в файле n.stdout.on('data'... в родительском процессе. Если я раскомментирую его, я получаю сообщение об ошибке:
n.stdout.on('data',function (data) {console.log(data);});
^
TypeError: Cannot read property 'on' of null
Я не против использования каких-либо асинхронных вариантов дочернего процесса, exec, fork или spawn. Любые предложения?