我有一个从主应用程序调用的node.js服务。我遇到了服务中发生错误并且服务挂起以防止处理任何其他请求的问题。我有代码来捕捉常见地方的错误,比如在做mongodb查询之后。
model.aggregate(
[
...
],function (err, result) {
if (err) {
next(err);
}
else {
//other code
}
我还使用以下代码捕获未捕获的异常并在此情况下终止服务。
process.on('uncaughtException', function (er) {
console.error(er.stack);
logger.log('info','Cbt Dev Service crashed',er);
process.exit(1);
});
这些似乎工作正常,但我偶尔遇到错误发生但未被任何一个捕获的问题。在这种情况下,错误的一个例子是从mongodb查询中获取结果并收到类似"无法读取属性' subjectAreas'未定义的。这个错误似乎被mongodb中间件抓住了。代码看起来像这样。
function (err, result) {
if (err) {
res.send(errorHandler(err, req));
}
else {
var subjectAreas = result[0].subjectAreas.sort();
}
在这种情况下,结果是一个空数组,因此显然会抛出错误。我知道我可以通过更好的编写代码来防止这种情况,例如使用try / catch但是如果我不知道这个问题存在并且服务再次挂断,我不知道错误是什么来修复这就是我需要记录它的原因。
我能做些什么来捕捉这些错误吗?