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})