与其他框架相比,Node.js + Express.js应用程序中的错误报告/处理似乎有所不同。我理解它的工作原理是否正确?
A) 通过接收错误作为回调函数的参数来 检测 错误。例如:
doSomethingAndRunCallback(function(err) { if(err) { … } });
B) 通过调用next(err) 报告 MIDDLEWARE中的错误。例:
handleRequest(req, res, next) { // An error occurs… next(err); }
C) 通过抛出错误来 报告 路由中的错误。例:
app.get('/home', function(req, res) { // An error occurs throw err; });
d) 手柄 通过配置通过app.error自己的错误处理的错误()或使用通用连接错误处理程序。例:
app.error(function(err, req, res, next) { console.error(err); res.send('Fail Whale, yo.'); });
这四个原则是否是Node.js + Express.js应用程序中所有错误处理/报告的基础?
Node.js中的错误处理通常采用A)格式。大多数回调都将错误对象作为第一个参数或返回null。
null
Express.js使用中间件,中间件语法使用B)和E)(如下所述)。
C)如果您问我,这是不好的做法。
您可以轻松地将上面的内容重写为
app.get('/home', function(req, res, next) { // An error occurs next(err); });
中间件语法在get请求中有效。
get
至于D)
(07:26:37 PM)tjholowaychuk:在3.x中删除了app.error
TJ刚刚确认app.error不赞成使用E
app.error
E)
app.use(function(err, req, res, next) { // Only handle `next(err)` calls });
长度为4(4个参数)的任何中间件均被视为错误中间件。当一个呼叫next(err)建立连接并呼叫基于错误的中间件时。
next(err)