为什么 asyncHandler 中的 next 不停止执行?

问题描述 投票:0回答:0

我有一个 NodeJS 打字稿项目,其中我有以下具有异步功能的端点:

router.post('/login', login)

具有以下功能

const login = asyncHandler(async (req: Request, res: Response, next: NextFunction) => {
  const credentials: Credentials = req.body as Credentials
  await UserService.findUserByEmail(credentials.email).then(user => {
    if (user != null) {
      if (user.password === credentials.password) {
        res.status(200).send('Token will be here in future')
        next()
      }
    }
    res.status(401).send('Email or password is wrong')
    next()
  })
})

但是,即使当我调用此端点并获得 HTTP 200 响应时,在终端中我也会收到以下错误:

Error: Cannot set headers after they are sent to the client

经过研究,显然发生的事情是即使在运行

res.send(400)
线之后也正在调用
res.status(200)
线,并且在它之后还有
next()
线。我 知道 我可以通过放置一个
if-else
块来修复此错误,但我想了解,为什么即使我调用了 next,该函数仍会继续执行。我注意到我可以使用
return
来阻止它,但它似乎有点不干净。

谢谢你们的帮助!

node.js typescript express asynchronous
© www.soinside.com 2019 - 2024. All rights reserved.