Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 错误:Can';发送NodeJS Mongoose后是否设置头文件?_Node.js_Mongoose - Fatal编程技术网

Node.js 错误:Can';发送NodeJS 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

我一直在收到发送后无法设置头,我想问题是因为我调用了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': 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});}
之前,它将在保存该项后运行