res.send() - 发送后无法设置标头
问题描述:
我正在使用Node js创建API,并且我有多个参数api的问题。我从couchbase获取多个文档。该API返回多个JSON文档,但在此之后,该程序崩溃。我只拨打res.send()
一次。我不明白我要去哪里错了。这是我的API:res.send() - 发送后无法设置标头
router.get("/employee/collectinsert/:_startdate/:_enddate", function(req, res, next){
var startDate = moment(req.params._startdate);
var endDate = moment(req.params._enddate);
var daysOfYear = [];
for(var date = moment(startDate); date.diff(endDate,'days') < 1; date.add(1, 'days')){
daysOfYear.push(formatDate(date));
}
bucket.getMulti(daysOfYear,function(err, results){
if(err) throw err;
for(var key in results) {
if(results.hasOwnProperty(key)) {
if(results[key].error) {
console.log("`" + key + "`: " + JSON.stringify(results[key]));
}
res.send(results);
}
}
process.exit(0);
});
});
而且我得到这个错误:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
at ServerResponse.header (C:\Users\ekaplan\Desktop\dashboard\node_modules\express\lib\response.js:730:10)
at ServerResponse.send (C:\Users\ekaplan\Desktop\dashboard\node_modules\express\lib\response.js:170:12)
at C:\Users\ekaplan\Desktop\dashboard\api\employee.js:53:21
at C:\Users\ekaplan\Desktop\dashboard\node_modules\couchbase\lib\bucket.js:1280:9
答
要调用res.send()多次,因为它是在一个for循环。将它移到循环之外
答
因为首先你必须设置这样的标题,如res.header("Access-Control-Allow-Origin", "*");
,并且发送一个,就像@ Stretch0所说的那样。
答
您的res.send
处于循环状态,您只能发送一个响应。
你可能想这样做:
bucket.getMulti(daysOfYear,function(err, results){
if(err) throw err;
for(var key in results) {
if(results.hasOwnProperty(key)) {
if(results[key].error) {
console.log("`" + key + "`: " + JSON.stringify(results[key]));
}
}
}
res.send(results);
}