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

问题描述 投票:1回答:3

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

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

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

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);
});
node.js mongoose
3个回答
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
投票

Tnx到@ 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();
}

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.