ExpressJS - 错误处理
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 之后,或者包含条件来检测错误类型并相应地向客户端响应。上述程序将显示以下输出。
