将数据传递到Express中的视图

时间:2015-08-25 04:01:14

标签: node.js mongodb express ejs

我正在尝试将查询结果传递到Express中的视图。使用mongodb进行查询,mongodb计算集体用户的总点数。

当我尝试将计数作为变量传递时,我得到了

ReferenceError: /Sites/test/views/dashboard.ejs:76

指的是<%= totalpoints%>在我的ejs视图中。以下是app.js中的代码

app.get('/dashboard', function(req, res) {

    User.find({}, function(err, docs) {
        console.log(docs);
    });

    User.find({
        points: {
            $exists: true
        }
    }, function(err, docs) {
        var count = 0;
        for (var i = 0; i < docs.length; i++) {
            count += docs[i].points;
        }
        return count;

        console.log('The total # of points is: ', count);
    });

    var totalpoints = count;

    res.render('dashboard', {
        title: 'Dashboard',
        user: req.user,
        totalpoints: totalpoints
    });

});

任何想法如何通过?

传递查询结果

1 个答案:

答案 0 :(得分:7)

Node异步执行查询。也就是说,查询的结果不会立即返回。  您必须等待,直到返回结果并使用回调来完成此操作。因此,渲染页面调用必须在回调中进行。尝试像这样修改你的功能。

app.get('/dashboard', function(req, res) {

  User.find({}, function(err, docs) {
      console.log(docs);
  });

  User.find({
      points: {
          $exists: true
      }
  }, function(err, docs) {
      if(err){
          console.log(err);
          //do error handling
      }
      //if no error, get the count and render it
      var count = 0;
      for (var i = 0; i < docs.length; i++) {
          count += docs[i].points;
      }
      var totalpoints = count;
      res.render('dashboard', {
      title: 'Dashboard',
      user: req.user,
      totalpoints: totalpoints});
  });


});