Node.js 错误:Can';发送NodeJS Mongoose后是否设置头文件?
我一直在收到发送后无法设置头,我想问题是因为我调用了res.status(400).json两次,但是我不知道如何做,因为我是node和mongoose的新手Node.js 错误:Can';发送NodeJS Mongoose后是否设置头文件?,node.js,mongoose,Node.js,Mongoose,我一直在收到发送后无法设置头,我想问题是因为我调用了res.status(400).json两次,但是我不知道如何做,因为我是node和mongoose的新手 createItem: function (req, res) { var item = new Items(); item.name = req.body.name; item.save(err => { if (err) {return res.status(400).json({'error
createItem: function (req, res) {
var item = new Items();
item.name = req.body.name;
item.save(err => {
if (err) {return res.status(400).json({'error': err});}
for(let i of req.body.subItems){
var sub = new SubItems();
sub.name = i.name;
sub.item = item._id;
sub.save(err => {
if (err) {return res.status(400).json({'error': err});}
})
item.subItems.push(sub);
item.save(err => {
if (err) {return res.status(400).json({'error': err});}
});
}
return res.status(200).send(item);
});
}
};
是的,这是因为您正在返回
res.status(400.json)({'error':err})代码>而不仅仅是在那里完成该函数。通过调用res.status().json()
或调用res.send()
或类似方法,将结束函数并向调用者发送响应
通过在回调中返回它,它将返回到调用方函数,调用方函数仍在运行,并将进入res.status(200).send(item)但是由于您已经将其设置为res.status(400.json)({'error':err})代码>标题已设置,因此将引发错误
如前所述,要解决这个问题,只需编写res.status(400).json({'error':err})代码>不返回,因为这将完成请求。或者,您可以使用next
回调函数,并在末尾使用通用错误处理程序来处理错误。请注意,如果使用此方法,则必须将next
作为参数添加到createItem函数中
通过删除返回值进行编码
createItem: function (req, res) {
var item = new Items();
item.name = req.body.name;
item.save(err => {
if (err) {res.status(400).json({'error': err});}
for(let i of req.body.subItems){
var sub = new SubItems();
sub.name = i.name;
sub.item = item._id;
sub.save(err => {
if (err) {res.status(400).json({'error': err});}
})
item.subItems.push(sub);
item.save(err => {
if (err) {res.status(400).json({'error': err});}
});
}
return res.status(200).send(item);
});
}
};
感谢您的回复,我更改了代码,但仍然出现了相同的错误,经过一些反思后,我认为问题与循环中的返回'res.status.json'有关。我不知道您是否解决了问题,但我意识到实际的错误是什么。这是因为在if之后不使用else,而这是在回调(即异步)上运行的。因此它将发送返回res.status(200)。发送(item)
在{res.status(400).json({'error':err});}
之前,它将在保存该项后运行