Отображение вывода запущенного дочернего процесса в nodejs (windows)

например, я запускаю самый простой веб-сервер в узле (я использую windows) со следующим кодом (с именем server.в JS):

    var http = require('http');
       http.createServer(function (req, res) {
         res.writeHead(200, {'Content-Type': 'text/plain'});
         res.end('Hello Worldn');
       }).listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');

Я хотел бы запустить это как дочерний процесс и успешно делаю это со следующим:

var exec = require('child_process').exec;
var serv = exec('node server.js', function(error, stdout, stderr){
    console.log('outputs & errors:' + error, stdout, stderr);
});

однако я ничего не получаю после запуска второго файла. Нет "выходы и ошибки", нет " сервер работает на...". Если я набираю localhost: 1337 в браузере, я получаю "hello world", поэтому я знаю, что он работает. Есть способ передачи этого " сервер работает...- чтобы я был уверен, что он слушает?

2 ответов


Exec вернется STDOUT и STDERR когда ребенок закончит, см. exec. Вот почему вы не видите никаких выходных данных при запуске сервера.

что вы хотите fork, который автоматически соединяет дочерний процесс STDOUT и STDERR к вашему родителю. Это предпочтительный способ, если ваш дочерний процесс является процессом узла.

если вы хотите использовать exec, вы можете использовать дочерний процесс потоки для получения данных, например:

child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);

var child_process = nw.require('child_process');
var spawn = child_process

/ / следующее находится в windows, и я записываю stdout и stderr в свой регистратор

var proc = spawn('cmd.exe', ['/S', '/C', script_path]);
proc.stdout.on('data', function(data) {
       logger(logtag, 'proc_stdout: ' + data);
});

proc.stderr.on('data', function(data) {
    logger(logtag, 'proc_stderr: ' + data);
});