当前位置: 首页 > 知识库问答 >
问题:

如何在Express中创建catchall异步错误处理程序?

华坚成
2023-03-14

我正在使用Express.js并尝试创建一个catchall异步错误处理程序。假设我有三条路都可能出错,

const app = express()

app.get('/user', async function(req,res) {
   const res = await getUsers()
})

app.get('/questions', async function(req,res) {
   const res = await getQuestions()
})

app.get('/answers', async function(req,res) {
   const res = await getAnswers()
})

在这三条路由中,所有getXX函数都可能抛出错误。
我希望所有路由都只有一个异步处理程序。类似这样的东西

app.use(asyncHandler)

所以我不必尝试/捕捉每一个可能抛出错误的地方。对此有什么解决办法吗?

提前道谢!

共有1个答案

皇甫敏达
2023-03-14

在try/catch块中写入async/await是最佳实践。因为如果await函数抛出错误,await只接受promise的解析输出,所以它由catch块处理。

在catch块next(error)中,调用which go抛出所有后续中间件,直到找不到错误处理Minddler为止。

const app = require("../../Reference/node-post-demo/app")

app.get('/user', async function (req, res, next) {
  try {
    const res = await getUsers();
    return res.json(res);
  } catch (error) {
    next(error)
  }
})

app.get('/questions', async function (req, res, next) {
  try {
    const res = await getQuestions()
    return res.json(res);
  } catch (error) {
    next(error)
  }
})

app.get('/answers', async function (req, res, next) {
  try {
    const res = await getAnswers()
    return res.json(res);
  } catch (error) {
    next(error)
  }
})

app.use(async (error, req, res) => {
  //here, your error hendling code
})
 类似资料:
  • 问题内容: 我有一个Express中间件,因为我想在其中使用中间件来清理我的代码。 问题在于,当它拒绝时,它不会进入我的错误中间件,但是如果我删除了关键字,并且在中间件中,它将删除。 所以我得到的不是输入我的错误处理中间件,而是如何让错误冒泡并表达处理它? 问题答案: 问题是当它拒绝时,它不会进入我的错误中间件,但是如果我删除了async关键字并扔进了中间件中,它就会去。 目前不支持诺言,将来的版

  • 编写JavaScript代码时,我们要时刻牢记,JavaScript引擎是一个事件驱动的执行引擎,代码总是以单线程执行,而回调函数的执行需要等到下一个满足条件的事件出现后,才会被执行。 例如,setTimeout()函数可以传入回调函数,并在指定若干毫秒后执行: function printTime() { console.log('It is time!'); } setTimeout

  • 几个小时以来,我试图在Spring Boot/MVC中创建一个自定义的全局错误处理程序。我读了很多文章,什么也没读。 这就是我的错误类: 我试着创建一个这样的类

  • 问题内容: 我试图在Spring Boot / MVC中创建CUSTOM全局错误处理程序。我读了很多文章,什么都没有…:/请帮我。 我尝试创建这样 我用这种方式: ` 问题答案: 你可以尝试以下代码:

  • 问题内容: 我具有以下Spring Integration配置,该配置允许我从MVC Controller调用网关方法并让控制器返回,而集成流将在不阻塞控制器的单独线程中继续进行。 但是,我无法弄清楚如何使我的错误处理程序为该异步流工作。我的网关定义了错误通道,但是由于某种原因我的异常没有到达。相反,我看到被调用了。 网关: 为了查看我的错误处理程序正在处理的异步集成流程中发生的异常,我该怎么办?

  • 问题内容: 我正在尝试通过express运行错误处理,但没有看到“错误!”的响应。就像我希望在控制台上看到“某些异常”一样,然后该进程被终止。这是应该如何设置错误处理的,如果可以的话,还有另一种捕获错误的方法吗? 问题答案: 有关错误处理的示例应用程序/指南可在https://expressjs.com/en/guide/error- handling.html 上找到, 但是应该可以修复您的代码