NodeJS在一个路由中进行两次查询

时间:2017-12-16 16:03:52

标签: node.js mongoose

我需要在同一个渲染文件(show.hbs)中显示InvitationComments

我在这里有这个代码,它工作正常,除了我无法实现那个评论也会显示。我真的很感激任何帮助。

我没有收到此代码的任何错误。

app.get('/invitation/:id', (req, res) => {

  let id = req.params.id;

  if(!ObjectID.isValid(id)){
    return res.status(404).send();
  }

  Comment.find({inviteId: id}).then((comment) => {
    if(!comment){
      return res.status(404).send();
    }
    res.render('show.hbs', {comment});
  }, (e) => {
    res.status(404).send();
  });

  Invitation.findById(id).then((invitation) => {
      if(!invitation){
        return res.status(404).send();
      }
    res.render('show.hbs', {invitation});
}, (e) => {
  res.status(404).send();
});

}, (e) => {
  console.log('Unable to find invitation', e);
});

3 个答案:

答案 0 :(得分:1)

你可以这样做,

Invitation.findById(id).then((invitation) => {
if (!invitation) {
    return res.status(404).send();
}
Comment.find({ inviteId: id }).then((comment) => {
    if (!comment) {
        return res.status(404).send();
    }
    res.render('show.hbs', { comment, invitation});
}, (e) => {
    res.status(404).send();
});    
}, (e) => {
res.status(404).send();
});

并使用邀请和评论进行渲染

答案 1 :(得分:1)

Tnx to @ vibhor1997a但这更漂亮

try {
  let invitation = await Invitation.findById(id).then((invitation) => {
  if (!invitation) {
    return res.status(404).send();
  }
  let comments = await Comment.find({ inviteId: id })
  if (!comments) {
    return res.status(404).send();
  }
  return res.render('show.hbs', { comments, invitation});
} catch (e) {
  return res.status(500).send();
}

答案 2 :(得分:0)

您没有粘贴错误消息,但我很确定它类似于Error: Can't set headers after they are sent to the client

只需嵌套查询或使用await https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await