Express 中的错误处理中间件
Express 的错误处理中间件 可帮助您处理错误而无需重复编码。 假设您直接在 Express 路由处理程序中处理错误:
app.put('/User/:id', async function(req, res) {
let user;
try {
user = await User.findOneAndUpdate({ _id: req.params.id }, req.body);
} catch (err) {
return res.status(err.status || 500).json({ message: err.message });
}
return res.json({ user });
});
上面的代码可以工作,但是,如果你有数百个端点,你的错误处理逻辑就会变得不可维护,因为它被重复了数百次。 输入 错误处理中间件 。
引入错误处理中间件
Express 查看中间件函数使用的参数数量来确定它是什么类型的中间件。 接受 4 个参数的中间件函数被定义为错误处理中间件。
const app = require('express')();
app.get('*', function routeHandler() {
throw new Error('Oops!');
});
// Your function **must** take 4 parameters for Express to consider it
// error handling middleware.
app.use((err, req, res, next) => {
res.status(500).json({ message: err.message });
});
Express 会自动为您处理同步错误,例如 routeHandler()
上面的功能。 Express 不 处理 异步错误。 如果您有异步错误,例如 异步函数 需要调用 next()
。
const app = require('express')();
app.get('*', async function asyncRouteHandler(req, res, next) {
try {
throw new Error('Oops!');
} catch (err) {
// The `next()` function tells Express to go to the next middleware
// in the chain. Express doesn't handle async errors, so you need to
// report errors by calling `next()`.
return next(err);
}
});
app.use((err, req, res, next) => {
res.status(500).json({ message: err.message });
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论