繁体   English   中英

将多个对象传递到车把模板-MongoDB,node.js,mongoskin

[英]Passing multiple objects to handlebars template - MongoDB, node.js, mongoskin

我有一个应用程序,需要从我的Mongo数据库中的两个不同集合中读取并将两个返回的对象传递到车把模板中。

使用下面的代码,我无法弄清楚如何使它工作,因为并没有填充universityData和courseData变量,因此不确定这是否是正确的方法。

当我登录时,回调中的大学和课程对象可以正常工作,获取所需的值。

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);
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM