优雅地处理NodeJS中子进程的错误

时间:2015-09-25 14:37:38

标签: node.js exception exception-handling

我正在使用节点进行服务器端处理 - 浏览大数据文件,然后插入数据库。这将在一个cron工作每晚运行。在程序中有几个需要完成的任务。我已设置child_process,以便正确执行这些不同的任务。但是,我希望整个事情都有一个错误处理部分。如果有任何步骤出错,我想发一封电子邮件给我,以便我知道。当我看到这个时,我认为它会捕获子进程中的错误,并允许我发送有问题的电子邮件。

process.on('error', function (err) {
        console.log("Error running Scripts")
        sendErr(err);
    });

然而,我很快发现这只会在产生过程时捕获错误,而不是在实际执行中。但后来我找到了uncaughtException事件,并用error替换了上面代码中的uncaughtException。不幸的是,它没有像我希望的那样工作,并且代码没有运行,并且没有发送电子邮件。有人知道怎么做,或者看我做错了什么。这是我目前的代码

var process = childProcess.fork(scriptName, {cwd:scriptWorkingDirectory});
process.on('uncaughtException', function (err) {
    console.log("Error running Scripts")
    sendErr(err);
});

1 个答案:

答案 0 :(得分:2)

您必须在子进程中执行process.on('uncaughtException', ...)而不是在父进程中。

家长无法听到子进程中的错误。 您可以在父母的'end'事件中收听,看看孩子是否已经结束,但是您只能根据退出代码判断它是否结束了。

因此,在孩子听取​​uncaughtException时,您可以通过subprocess.send向子进程发送消息给父进程 父进程可以根据需要发送邮件。

相关问题