我有一个async.eachSeries()
函数来处理对象列表。在列表之后我想要一个res.send()
函数,这样我就可以将结果发送回前端。
但是我得到了一个
'发送后无法设置标题'
res.send()
行上的错误,它看起来在完全处理列表之前调用了该函数。
module.exports.createOrder = function(req,res){
console.log("CreateOrder");
var orderDescription = "";
var payId = new ObjectId(); //create one id, to pay multiple orders at one time
var shopList = groupByShop(req.body.cart);
var orders = [];
var result = {};
console.log("before async");
//the cart is now sorted by shop, now we can make orders for each shop
async.eachSeries(Object.keys(shopList), function(key, callback){
console.log("in async");
var shop = shopList[key];
console.log("before saveOrder");
saveOrder(payId, shop, key, req.body, req.user, function(err, newOrder){
console.log("in saveorder");
if(err){
console.log("Err", err);
callback(err);
}else{
console.log("order saved");
orders.push(newOrder);
callback();
}
})
}, function(err){
if(err){
console.log("One or more orders are not saved:", err);
return res.status(400).json(err);
}else{
console.log("All orders are processed");
result = {
message: 'OK',
order: {
payId: orders[0].payId
}
};
return res.send(200).json(result);
}
})
}
这里出了什么问题?目前正在使用“shopList
”中的一个对象进行测试,并且所有日志行都在服务器控制台中可见。
当我删除该行时,该功能正常,但当然,他没有发送任何结果。我也尝试将该行移到函数外部,但这当然会导致空result{}
和函数完成前的发送。
答案 0 :(得分:1)
res.send(200)
会发送内容为“200”的HTML回复 - 您要做的是res.status(200).json(result)
,尽管res.json(result)
也可以正常使用。