我无法理解如何处理似乎是 express 的一个非常基本的方面。如果我有一些代码在异步回调中引发异常,则我无法捕获该异常,因为在回调运行时 try/catch 块已不在范围内。在这些情况下,浏览器将挂起,直到它最终放弃声明服务器无响应。这是非常糟糕的用户体验。我宁愿能够立即向客户端返回 500 错误。默认的快速错误处理程序显然不能处理这种情况。这是一些示例代码:
var express = require("express");
var app = express();
app.use(app.router);
//express error handler (never called)
app.use(function(err, req, res, next) {
console.log(err);
res.send(500);
});
app.get("/test", function(req, res, next) {
require("fs").readFile("/some/file", function(err, data) {
a.b(); //blow up
});
});
app.listen(8888);
在上面的代码中,ab() 行抛出了“ReferenceError: a is not defined”异常。定义的错误处理程序永远不会被调用。请注意,在这种情况下 fs.readFile() 返回的 err 对象为空,因为文件已被正确读取。错误是异步处理程序中的代码。
我什至已经阅读了这篇关于使用节点的 uncaughtExpception 的帖子,但文档说不要使用该方法。即使我确实使用了它,我将如何将 500 响应发送回用户?快速响应对象不再供我使用。
那么你如何处理这种情况呢?