Node.js 为什么我';“我得到了”;发送到客户机后无法设置标题";错误事件,尽管我使用了1次响应后返回
我想问一下,如果您返回的响应超过1个,为什么我会不断收到错误:Node.js 为什么我';“我得到了”;发送到客户机后无法设置标题";错误事件,尽管我使用了1次响应后返回,node.js,express,Node.js,Express,我想问一下,如果您返回的响应超过1个,为什么我会不断收到错误: events.js:298 throw er; // Unhandled 'error' event ^ Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at ServerResponse.setHeader (_http_outgoing.js:535:11) at Se
events.js:298
throw er; // Unhandled 'error' event
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:535:11)
at ServerResponse.header (C:\Web Develope\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Web Develope\node_modules\express\lib\response.js:170:12)
at C:\Web\wiki-API\app.js:69:21
at C:\Web\node_modules\mongoose\lib\model.js:4798:16
at C:\Web\node_modules\mongoose\lib\query.js:4389:12
at C:\Web\node_modules\mongoose\lib\helpers\query\completeMany.js:35:39
at processTicksAndRejections (internal/process/task_queues.js:79:11)
Emitted 'error' event on Function instance at:
at C:\Web\node_modules\mongoose\lib\model.js:4800:13
at C:\Web\node_modules\mongoose\lib\query.js:4389:12
at C:\Web\node_modules\mongoose\lib\helpers\query\completeMany.js:35:39
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
code: 'ERR_HTTP_HEADERS_SENT'
}
这是我的密码:
app.route('/data/:dataName')
.get((req,res)=>{
Article.find({},(err,list_data)=>{
if(!err){
if(list_data){
list_data.forEach((item)=>{
if(_.lowerCase(req.params.dataName) === _.lowerCase(item.title)){
return res.send(item);
}
});
}
res.send("No data found!");
}
})
})
我仍然不明白为什么在执行第一个响应之后,它仍然会转到下一个响应并弹出错误
谢谢大家! 在Node Js中,一个请求只能发送一个响应。 如果找到或未找到用户,则无法发送两个响应
if(_.lowerCase(req.params.dataName) === _.lowerCase(item.title)){
return res.send(item);
}
else
res.send("No data found!");
您收到的错误是由于多次发送响应造成的。您应该使用错误优先的方法来处理回调,如下所示
app.route('/data/:dataName')
.get((req,res)=>{
Article.find({}, async (err,list_data)=>{
if(err){
return res.send("No data found!");
}
if(list_data){
let filter_data = await list_data.filter((item)=>{
return req.params.dataName === _.lowerCase(item.title)
});
return res.send(filter_data)
}
})
})
你可以检查甜食!我会调查的。