节点分叉子进程并获取它's错误

Node fork child process and get it's errors

本文关键字:错误 分叉 子进程 获取 节点      更新时间:2023-09-26

我可以派生一个子进程,但我在查看该文件中发生的错误时遇到问题,我知道该文件有错误,因为我创建了一个没有关闭}的对象,所以应该会发生错误。使用以下代码,我什么也得不到(在控制台和/或浏览器中):

var child = require('child_process').fork(full_path, [], {
    silent: true,
});
// Tried both of these and nothing gets displayed
child.stdout.on('error', function(data){
    res.write(data);
    console.log(data);
});
child.stderr.on('error', function(data){
    res.write(data);
    console.log(data);
});

以下是子进程:

var sys = require('sys');
var mustache = require('mustache');
var template = require('./templates/mypage.html');
sys.puts(template);
var view = {
    "musketeers": ["Athos", "Aramis", "Porthos", "D'Artagnan"]
; // Forced error here with no closing "}"
var html = mustache.to_html(template, view);
sys.puts(html);

我需要做些什么来显示错误?我做错了什么?

编辑

完整脚本:

var sys    = require('sys');
var config = require('./server.json');
var url    = require('url');
var http   = require('http');
function handleRequest(req, res){
    var full_path = "";
    for(var i in config){
        var domain = config[i].server;
        if(req.headers.host === domain){
            var info = url.parse(req.url);
            full_path = config[i].root + info.pathname;
        }
    }
    console.log("Page: " + full_path);
    if(full_path != ""){
        var child = require('child_process').fork(full_path, [], {
            silent: true,
        });
        child.stdout.on('data', function(data){
            res.write(data);
        });
        child.stdout.on('error', function(data){
            res.write(data);
            console.log(data);
        });
        child.stderr.on('error', function(data){
            res.write(data);
            console.log(data);
        });
        child.stdout.on('end', function(){
            res.end();
        });
    }else{
        res.end();
    }
}
var server = http.createServer(handleRequest);
server.listen(3000, function(err){
    console.log(err || 'Server listening on 3000');
});

默认情况下,所有输入/输出都返回到父级。

给定parent.js

var fork = require('child_process').fork;
var child = fork('./child');

child.js的输出和错误返回到父

setInterval(function() {
    console.log('I am here')
}, 1000);
setTimeout(function() {
    throw new Error('oops')
}, 5000);

就像@柏拉图说的,{ silent: true }会关闭