我尝试使用节点js和mysql,以及将数据库中的数据渲染到视图中。
问题是,如何在1个视图中渲染多个数据(使用jade模板)。
router.get('/about', function(req, res) {
var animalsData = sequelize.query("SELECT * FROM animals").success(function(rows) {
return rows;
});
console.log(animals); // returns 'undefined'
var humansData = sequelize.query("SELECT * FROM humans").success(function(rows) {
return rows;
});
console.log(humans); // returns 'undefined'
res.render('about', { animals: animalsData, humans: humansData });
});
如您所见,我如何获取数据然后将其传递到视图中?如果我希望将5或6位数据(mysql查询)传递给视图,那么使用嵌套回调会变得混乱吗?
由于
答案 0 :(得分:0)
首先,那些回报不起作用。您运行的代码是异步。我建议你使用承诺:
var q = require("q");
router.get('/about', function(req, res) {
var animalDeferer = q.defer(),
humanDeferer = q.defer;
sequelize.query("SELECT * FROM animals").success(function(rows) {
animalDeferer.resolve(rows);
});
sequelize.query("SELECT * FROM humans").success(function(rows) {
humanDeferer.resolve(rows);
});
Q.all([animalDeferer.promsie, humanDeferer.promise]).spread( function(animalsData, humansData) {
res.render('about', { animals: animalsData, humans: humansData });
});
});
我直接在答案框上写了这个,所以它可能有拼写错误。