Node.js [NodeJS]:发送到客户端后无法设置头
在第一个答案中可以找到完整的概述和答案: 我正在使用:Node.js [NodeJS]:发送到客户端后无法设置头,node.js,mongodb,express,http,mongoose,Node.js,Mongodb,Express,Http,Mongoose,在第一个答案中可以找到完整的概述和答案: 我正在使用: 快车 猫鼬(用于猫鼬) 在注册新用户时,我想检查用户的电子邮件或名称是否已经存在(因为它们必须是唯一的) 我有一段代码: try { let user = await User.findOne({ email }) if (user) { res .status(400) .json({ status: 'error', body: [{ msg: 'email already exi
- 快车
- 猫鼬(用于猫鼬)
try {
let user = await User.findOne({ email })
if (user) {
res
.status(400)
.json({ status: 'error', body: [{ msg: 'email already exist' }] })
}
user = await User.findOne({ name })
if (user) {
res
.status(400)
.json({ status: 'error', body: [{ msg: 'name already exist' }] })
}
// ... some more code
} catch(err) {
//... code
}
我一直收到:Error[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头。终端没有显示创建错误的确切位置。响应是
res.status(400).json({…})
而不是返回res.status(400).json({…})
因此,代码继续执行第二个条件并再次尝试发送响应,但express让我们知道响应已经发送,并且它无法再更改这些响应
解决方法非常简单-添加
返回,并确保在尝试发送另一个响应之前停止此代码。我也遇到了同样的问题,但键入了,试图将响应的两倍发送到我的函数中。看来这也是你的情况。正如@David所提到的,return语句使函数失效
resp.send('OK')
do_stuff
resp.send('OK')
您应该返回res..
,否则即使您已经尝试响应,该方法仍将继续。感谢您的快速响应!我写这篇文章是为了自己写解决方案(意识到在浪费了一些时间之后…)来帮助别人。无论如何谢谢你!