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

use*_*723 5 exception-handling exception node.js

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

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

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

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

sag*_*gie 3

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

父进程无法侦听子进程中的错误。您可以在父级中监听'end'子级的事件,以查看子级是否结束,但您无法仅根据退出代码判断它是否正常结束。

因此,在子进程中监听,uncaughtException然后您可以通过父进程从子进程向父进程发送消息,然后subprocess.send 可以根据需要发送邮件。