Express 中的错误处理中间件

发布于 2022-08-11 12:44:51 字数 1794 浏览 253 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

雾里花

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文