Node.js Express正在恢复发送成功和错误-错误\u HTTP\u头\u已发送

Node.js Express正在恢复发送成功和错误-错误\u HTTP\u头\u已发送,node.js,express,Node.js,Express,我对[ERR\u HTTP\u HEADERS\u SENT]有一个奇怪的问题::无法在将头发送到客户端后设置头。它在try/catch中,但在res.send({message:'Company setup'})之后仍然不知何故它还发送res.send({error}),这是不应该发生的 我还尝试了返回res.send({message:'Company setup'}),但仍然有相同的错误。除了这个错误,我还得到: (节点:19234)未处理的PromisejectionWarning:未处

我对
[ERR\u HTTP\u HEADERS\u SENT]有一个奇怪的问题::无法在将头发送到客户端后设置头。它在
try/catch
中,但在
res.send({message:'Company setup'})之后仍然不知何故
它还发送
res.send({error})
,这是不应该发生的

我还尝试了
返回res.send({message:'Company setup'})
,但仍然有相同的错误。除了这个错误,我还得到:

(节点:19234)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)

await knex()
调用被注释掉时,我发现没有问题

try {
      if (req.files) { //multer
        let data = req.body
        const locations = JSON.parse(data.locations)

        const parsedLocations = locations.map((obj, index) => {
          (...)
        })

        await asyncForEach(parsedLocations, async (element, index) => {
          const country = await knex('countries').first().where({ country: element.country })
        })

        console.log('company set up')
        res.send({ message: 'Company set up' })
      }
    } catch (error) {
      console.log('error')
      console.log(error)
      res.send({ error})
    }
以下是供参考的
asyncForEach
函数:

async function asyncForEach(array, callback) {
  for (let index = 0; index < array.length; index++) {
    await callback(array[index], index, array);
  }
}

此错误是由于尝试发送多个响应造成的

您可以在返回响应之前检查响应是否已经发送。 比如:

如果已发送,则不会再发送另一个

您的代码没有捕获错误。


返回res.status(405.send)(“用户已经存在”)我没有创建任何用户。唯一的
insert
是有条件的,只有当国家不存在时才会出现。这个例子显示了response than return关键字的使用,所以不显示ERR\u HTTP\u HEADERS\u SENT error。有趣的是,为什么它大多数时候都有效,有时无效。我甚至添加了网络请求的屏幕截图以供参考。我会试试。给出错误日志的屏幕截图,我会尝试调试它。在asyncForEach函数中也使用try/catch。你能详细解释一下为什么try/catch不够吗?我想知道我在做什么,这样我将来也可以使用它好吧,它不起作用-我甚至在下一个函数之前检查了异步循环是否吐出了所有东西,它确实这样做了,try/catch没有帮助你能在node.js端给出错误日志吗?@sagaranamagar用错误日志更新了我的问题
[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (/Users/xx/Developer/microservice/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/Users/xx/Developer/microservice/node_modules/express/lib/response.js:170:12)
    at ServerResponse.json (/Users/xx/Developer/microservice/node_modules/express/lib/response.js:267:15)
    at ServerResponse.send (/Users/xx/Developer/microservice/node_modules/express/lib/response.js:158:21)
    at router.post (/Users/xx/Developer/microservice/routes/admin.js:714:11)
(node:19337) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
if (res.headerSent) {
res.send({ data/ error})