我有一个应用程序,我需要从 Mongo 数据库中的两个不同集合中读取数据,并将返回的对象传递到 Handlebars 模板中。
使用下面的代码,我无法弄清楚如何让它工作,因为 UniversityData 和 courseData 变量没有被填充,不确定这是否是正确的方法。
回调中的大学和类(class)对象工作正常,因为当我登录时我得到了我需要的值。
router.get('/newcastle/G400', function(req, res) {
var db = req.db;
var universityData;
var courseData;
db.collection('universities', function(err, collection) {
collection.findOne({'code': 'N21'}, function(err, university) {
universityData = university;
console.log(university);
//res.render('course', {title: university.name, university: university, course: { "code": "G400", "name": "Computer Science", "studylength": "3 years (BSc)/4 years (MSc)", "requirements": "AAB - ABB", "satisfactionrating": "98"}});
});
});
db.collection('courses', function(err, collection) {
collection.findOne({'universitycode': 'N21', 'code': 'G400'}, function(err, course) {
courseData = course;
console.log(course);
});
});
console.log(universityData);
console.log(courseData);
res.render('course', {university: universityData, course: courseData});
});
我的问题是如何将每个查询中的对象传递到一个模板中?
任何帮助将不胜感激,因为我对 Javascript、node 和 Mongo 还很陌生。
最佳答案
即使它只是“两个”函数,您也可以使用像 async
这样的模块帮助组织它们而不需要深度嵌套。示例:
var async = require('async');
// ...
router.get('/newcastle/G400', function(req, res) {
var db = req.db;
async.parallel([
universityData: function(callback) {
db.collection('universities', function(err, collection) {
if (err)
return callback(err);
collection.findOne({'code': 'N21'}, callback);
});
},
courseData: function(callback) {
db.collection('courses', function(err, collection) {
if (err)
return callback(err);
collection.findOne({'universitycode': 'N21', 'code': 'G400'}, callback);
});
}
], function(err, results) {
if (err)
return res.send(500);
// results === { universityData: { ... }, courseData: { ... } }
res.render('course', results);
});
});
关于javascript - 将多个对象传递给 Handlebars 模板 - MongoDB、node.js、mongoskin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193409/