一个app.get中,怎么才能把数据中不同的两个集合输出到页面上?
发布于 11 年前 作者 tonyte 5373 次浏览 最后一次编辑是 8 年前

app.get(’/test’,function(req, res){ category.getTen(function (err, posts) { res.render(‘test’, { //title: ‘分类管理’, posts: posts, user: req.session.user, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString() }); }) category.getCat(function (err, pers) { res.render(‘test’, { title: ‘分类管理’, pers: pers, user: req.session.user, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString() }); })

});

代码如上,两个方法分别加载两个集合的数据,如果单独写没问题,但两个写在一起,就碰到问题了,求解决指导。

4 回复

你这种情况用async.parallel就行

Q也可以。

  1. 代码中无法 res.render 两次。根据你的代码,两个 res.render 随机一个执行,另一个无效。

  2. 应该先获取 ten 和 cat,等两样都获取时,再一起 render。

  3. 如果用串行思维,那么把下面那句 getCat 嵌套在 getTen 里面就好了。

  4. 如果并行,可以去试试 async 或者 eventproxy。我个人喜欢后者。

谢谢,我使用你说的async方法, app.get(’/test’,function(req, res){ category.getCat(function (err, results) { res.render(‘test’, { title: ‘分类管理’, pers: results.one, posts: results.two, user: req.session.user, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString() }); })

});

后面是这样的,

var date = {}; async.parallel({ one: function(callback) { setTimeout(function(){ PersonModel.find(function(err,persons){ console.log(“1”); //console.log(persons); callback(null, persons); }); },100); },

two: function(callback) { setTimeout(function(){ PostModel.find({“title”:“aa”},function(err,posts){ console.log(“2”); //console.log(posts); callback(null, posts); }); },200); } }, function(err,results){ //return results; //callback(null, results); //console.log(results); date = results; }) console.log(date); category.getCat = function(callback) { console.log(“2”+date); callback(null, date); }

如果你觉得我的代码有改进或者优化的地方,请不吝指出,谢谢

恩,你解释的很到位,你说的第二种方法我尝试过,但未能成功(而且这种方法应该不是很提倡吧)。第三种也试过,貌似也没成功。然后用了你指的第四种方法,成功了。谢谢指出

回到顶部