Express.js 怎么处理错误?

文章导读
Previous Quiz Next Express 中的错误处理使用 middleware 实现。但这种 middleware 具有特殊属性。错误处理 middleware 的定义方式与其他 middleware 函数相同,只是错误处理函数 必须有四个参数,而不是三个
A A

ExpressJS - 错误处理



Previous
Quiz
Next

Express 中的错误处理使用 middleware 实现。但这种 middleware 具有特殊属性。错误处理 middleware 的定义方式与其他 middleware 函数相同,只是错误处理函数 必须有四个参数,而不是三个:err, req, res, next。例如,要在任何错误时发送响应,我们可以使用 −

app.use(function(err, req, res, next) {
   console.error(err.stack);
   res.status(500).send('Something broke!');
});

到目前为止,我们一直在 route 中处理错误。错误处理 middleware 允许我们将错误逻辑分离出来,并相应地发送响应。我们在 middleware 中讨论的 next() 方法会将我们带到下一个 middleware/route handler

对于错误处理,我们有 next(err) 函数。调用此函数会跳过所有 middleware,并将我们匹配到该 route 的下一个错误处理器。让我们通过一个例子来理解这一点。

index.js

var express = require('express');
var app = express();

app.get('/', function(req, res){
   // 创建一个错误并将其传递给 next 函数
   var err = new Error("Something went wrong");
   next(err);
});

/*
 * 其他 route handler 和 middleware 在这里
 * ....
 */

// 错误处理 middleware
app.use(function(err, req, res, next) {
   res.status(500);
   res.send("Oops, something went wrong.")
});

app.listen(3000);

输出

这个错误处理 middleware 可以战略性地放置在 route 之后,或者包含条件来检测错误类型并相应地向客户端响应。上述程序将显示以下输出。

Error handling