将数据传递到 Express 中的视图
Posted
技术标签:
【中文标题】将数据传递到 Express 中的视图【英文标题】:Pass data through to the view in Express 【发布时间】:2015-11-18 15:28:09 【问题描述】:我正在尝试将查询结果传递给我在 Express 中的视图。查询是使用mongodb进行的,计算集体用户的总积分。
当我尝试将计数作为变量传递时,我得到了
ReferenceError: /Sites/test/views/dashboard.ejs:76
在我的 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】:节点异步执行查询。即查询的结果不会立即返回。 您必须等到返回结果并使用回调来完成此操作。因此,渲染页面调用必须在回调中发生。尝试像这样修改你的函数。
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);
);
);
【讨论】:
我怀疑res.render
是否等待 for 循环完成
@ServerSideSkittles 使用User.aggregate
来查找点的总和,而不是在 for 循环中添加。 mongoosejs.com/docs/api.html#aggregate-js
@Mahesh for
循环是同步的,所以是的,res.render()
将“等待”。【参考方案2】:
Node.js 本质上是异步的,res.render
将在您从猫鼬获取数据之前执行。试试下面的代码。
app.get('/dashboard', function(req, res)
User.find(, function(err, docs)
console.log(docs);
);
User.aggregate( $group:
_id: null,
count: $sum: "$points"
, function(err, docs)
if(err)
console.log(err);
//do error handling
else
res.render('dashboard',
title: 'Dashboard',
user: req.user,
totalpoints: docs.count );
);
);
【讨论】:
以上是关于将数据传递到 Express 中的视图的主要内容,如果未能解决你的问题,请参考以下文章