将数据传递到 Express 中的视图
Pass data through to the view in Express
我正在尝试将查询结果传递到我在 Express 中的视图。使用mongodb进行查询,计算集体用户的总积分。
当我尝试将计数作为变量传递时,我得到
ReferenceError: /Sites/test/views/dashboard.ejs:76
在我的 ejs 视图中指的是 <%= totalpoints %>。下面是我在 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
});
});
有什么办法可以传递查询结果吗?
节点异步执行查询。即查询的结果不是立即返回的。
您必须等到结果返回并使用回调来完成 this.So,渲染页面调用必须在回调内发生。尝试像这样修改您的函数。
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});
});
});
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 中的视图。使用mongodb进行查询,计算集体用户的总积分。
当我尝试将计数作为变量传递时,我得到
ReferenceError: /Sites/test/views/dashboard.ejs:76
在我的 ejs 视图中指的是 <%= totalpoints %>。下面是我在 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
});
});
有什么办法可以传递查询结果吗?
节点异步执行查询。即查询的结果不是立即返回的。 您必须等到结果返回并使用回调来完成 this.So,渲染页面调用必须在回调内发生。尝试像这样修改您的函数。
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});
});
});
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 });
}
);
});