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..
,否则即使您已经尝试响应,该方法仍将继续。感谢您的快速响应!我写这篇文章是为了自己写解决方案(意识到在浪费了一些时间之后…)来帮助别人。无论如何谢谢你!