我有一个 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
来阻止它,但它似乎有点不干净。
谢谢你们的帮助!