传递来自2个mongodb对象的数据

时间:2017-05-05 12:21:01

标签: node.js mongodb express routes

我正在创建一个博客网站,并尝试实现一项功能,以便用户可以报告具体的评论。我们的想法是,用户会点击报告'在特定评论下方链接并转到新页面,该页面将预先填充他们报告的评论和评论所属博客的标题。

到目前为止,我写了以下路线:

router.get('/blogs/:blog_id/comments/:comment_id/report', function(req, res) {
// find comment
Comment.findById(req.params.comment_id, function(err, foundComment){
if(err){
  res.redirect('/blogs');
} else {
  res.render('report-comment', {comment: foundComment});
}
});
});

这已成功生成我的报告评论页面,然后我可以从报告评论页面使用eps<%= comment.text%>填充评论。但是,我无法在这条路线中解决如何通过嵌入评论的博客详细信息。在我的报告评论表单中,我希望能够使用<%= blog.title%>填充博客标题。但在我的路线中,我是否通过了博客信息?

1 个答案:

答案 0 :(得分:0)

使用req对象将信息从一个中间件功能传递到下一个中​​间件功能。您还应指定单独的中间件函数来检索不同的数据,然后最终呈现它。例如您可以修改代码:

router.get('/blogs/:blog_id/comments/:comment_id/report',
  function( req, res, next ){
    // this is first middleware and fetches comment data
    Comment.findById(req.params.comment_id, function(err, foundComment){
      if(err){
        res.redirect('/blogs');
      }else{
        req.comment = foundComment;
        next();
      }
    });//findById()
  },      
  function(req, res, next){
    // this is second middleware that fetches blog data
   Blog.findById(req.params.blog_id, function(err, foundBlog){
     if(err){
       res.redirect('/blogs');
     } else {
       req.blog = foundBlog;
       next();
     }
  });
},
function( req, res ){
  // this is third and final middleware that renders the page
  var pageInfo = {};
  pageInfo.comment = req.comment;
  pageInfo.blog = req.blog;
  res.render("/report-template", pageInfo);
});

现在,在report-template文件中,您可以将这些变量用作commentblog