我有一个使用koa的简单Web应用程序,并且希望在发生我不期望的错误时崩溃进程。不幸的是,koa似乎总是捕获错误,将其报告给stderr并保持进程运行。有没有办法覆盖这种行为?
我已经回顾了Does Koa safely handle errors?,它提到了koa不会陷阱的2个场景,但是它表明第一个场景格式不正确,我无法弄清楚如何使用第二个场景。
作为参考,我有以下错误处理程序,它尝试使用唯一的'id id向用户报告失败,然后使用setImmediate方法崩溃:
app.use(function* (next) {
try {
yield next;
} catch (err) {
// https://stackoverflow.com/questions/10985872/nodejs-generate-short-unique-alphanumeric
var tuple = this.request.socket.remoteAddress + ":" + this.request.socket.remotePort;
var errorSession = parseInt(tuple.replace(/[^\d]/g, ''), 10).toString(36).toUpperCase();
err.message = "["+errorSession+"] "+err.message;
logger.error(err);
this.status = err.status || 500;
yield this.render('unknown-error', { errorSession : errorSession });
// this kinda works, but is considered malformed
setImmediate(function () { throw err;});
}
});