nodejs 消息中间件,

  nodejs 消息中间件,

  本文将带您了解Express in Node的错误处理中间件,并介绍如何定义错误处理中间件以及如何与async/await一起使用。希望对你有帮助!

  node.js速度课程简介:进入学习

  Express的错误处理中间件可以帮助您处理错误,而无需重复相同的工作。假设您直接在快速路由处理器中处理错误:

  app.put(/user/:id ,async (req,res)={

  让用户

  尝试{

  user=await user . findoneandupdate({ _ id:req . params . id },req.body)

  } catch (err) {

  返回资源状态(err.status 500)。json({ message: err.message })

  }

  return res.json({ user })

  })以上代码可以正常工作。但是,如果有数百个接口,那么错误处理逻辑将变得不可维护,因为它已经重复了数百次。

  

定义错误处理中间件

   Express根据中间件函数采用的参数个数分为不同的类型。接受4个参数的中间件函数定义为错误处理中间件,只有在出错时才会被调用。

  const app=require(express )()

  app.get(* ,函数routeHandler() {

  //这个中间件抛出一个错误,Express会直接转到下一个错误处理程序

  抛出新错误(“哎呀!”)

  })

  app.get(* ),(req,res,next)={

  //这个中间件不是错误处理程序(只有3个参数),Express会跳过,因为前面的中间件有错误。

  Console.log(这里不会打印)

  })

  //您的函数必须接受4个参数,以便Express将其视为错误处理中间件。

  app.use((err,req,res,next)={

  res.status(500)。json({ message: err.message })

  })Express会自动为你处理同步错误,比如上面的routeHandler()方法。但是,Express不处理异步错误。如果发生异步错误,需要调用next()。

  const app=require(express )()

  app.get(* ),(req,res,next)={

  //next()方法告诉Express转到链中的下一个中间件。

  //Express不处理异步错误,所以需要通过调用next()来报告错误。

  setImmediate(()={

  下一步(新错误(哎呀))

  })

  })

  app.use((err,req,res,next)={

  res.status(500)。json({

  消息:err.message

  })

  })记住Express中间件是按顺序执行的。您应该在所有其他中间件之后定义错误处理程序。否则,将不会调用您的错误处理程序:

  

与 async/await 一起使用

  快递抓不住承诺的例外。Express是ES6之前写的,如何处理async/await没有好的解决方案。

  例如,以下服务器将永远不会成功发送HTTP响应,因为Promise reject永远不会被处理:

  const app=require(express )()

  app.get(* ),(req,res,next)={

  //异步错误必须由next()报告

  返回新承诺((解决,拒绝)={

  setImmediate(()=reject(新错误( woops )))

  }).接住(下一个)

  })

  app.use((error,req,res,next)={

  console.log(将不打印)

  RES . JSON({ message:error . message })

  })

  App.listen(3000)我们可以封装或者使用现有的库来捕获。

  首先,我们简单地封装了一个函数来连接async/await和快速错误处理中间件。

  函数wrapAsync(fn) {

  返回函数(req,res,next) {

  fn(请求,结果,下一个)。接住(下一个)

  }

  }

  app.get(* ,wrapAsync(async (req,res)={

  等待新的承诺(resolve=setTimeout(()=resolve(),50))

  //异步错误!

  抛出新错误(“woops”)

  }))使用第三方库express-async-errors,一个简单的ES6 async/await支持hack:

  要求(“快速异步错误”)

  app.get(* ,async (req,res,next)={

  等待新的承诺((resolve)=setTimeout(()=resolve(),50))

  抛出新错误(“woops”)

  })

最后

  快速错误处理中间件允许您以最大化关注点分离的方式处理错误。您不需要处理业务逻辑中的错误。如果使用async/await,甚至不需要try/catch。这些错误将出现在您的错误处理程序中,然后您的错误处理程序可以决定如何响应请求。请确保在您的下一个Express应用程序中充分利用这一强大功能!

  更多关于node的信息,请访问:nodejs教程!以上是对Express in Node错误处理中间件细节的简要分析。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: