如何摆脱“发送后无法设置标题”。错误

时间:2019-01-16 22:33:07

标签: node.js express mongoose

我正在为我的项目创建一个小API,但在将文档保存在MongoDB数据库中时遇到问题。

postRouter.get('/get/:skip/:limit', (req, res) => {
  const {skip, limit} = req.params;
  const query = Post.find().skip(skip).limit(limit).sort('-date');

  query.exec((err, docs) => {
    if (err) {
      res.send({error: 'Something went wrong'});
    }
    res.json(docs);
  });
});

每次我执行GET请求时,都会收到“发送后无法设置标题”。如何修复我的代码?

2 个答案:

答案 0 :(得分:1)

在执行res.send()之后,您需要确保这是要发送给客户端的最后一件事。

postRouter.get('/get/:skip/:limit', (req, res) => {
  const {skip, limit} = req.params;
  const query = Post.find().skip(skip).limit(limit).sort('-date');

  query.exec((err, docs) => {
    if (err) {
      return res.send({error: 'Something went wrong'});
    }
    res.json(docs);
  });
});

postRouter.get('/get/:skip/:limit', (req, res) => {
  const {skip, limit} = req.params;
  const query = Post.find().skip(skip).limit(limit).sort('-date');

  query.exec((err, docs) => {
    if (err) {
      res.send({error: 'Something went wrong'});
    }else{
      res.json(docs);
    }
  });
});

答案 1 :(得分:1)

问题似乎在这里:

    if (err) {
      res.send({error: 'Something went wrong'});
    }
    res.json(docs);

当err为true时,它将发回错误,然后掉落if并且也执行res.json()。

    if (err) {
      return res.send({error: 'Something went wrong'});
    }
    return res.json(docs);

但是现在您需要找出为什么err并非未定义的原因:)