在 node.js 中用 express 链接 jade 渲染
Chaining jade renders, in node.js with express
我想用Jade渲染多个部分,
我需要一些脚本
之间。我先尝试了一些简单的事情:
// con is a mysql connection, res is a express render target
function main_page_jade(con, res)
{
con.query('SELECT * FROM ' + 'pg_user' , function(err,rows,fields) {
res.render( 'table.jade', {rows:rows, fields:fields, title:'DB User'} );
con.query('SELECT * FROM ' + 'pg_comp' , function(err,rows,fields) {
res.render( 'table.jade', {rows:rows, fields:fields, title:'DB Comp'} );
});
});
}
这根本行不通,所以我用谷歌搜索了一下,建议似乎是
令人费解的(实际上,意大利面)。我是 node/js/jade 的新手(刚接触 10 天),
可能有点 C++ 偏见(比如 20 年偏见),所以我的问题是;
如何在 node
中以导致良好设计的方式编写我的项目
尝试这样的事情:
function main_page_jade(con, res) {
var data = [];
con.query('SELECT * FROM ' + 'pg_user' , function(err,rows,fields) {
data.push({rows:rows, fields:fields, title:'DB User'});
con.query('SELECT * FROM ' + 'pg_comp' , function(err,rows,fields) {
data.push({rows:rows, fields:fields, title:'DB Comp'});
res.render('index', {data: data});
});
});
}
在你的 jade 模板中:
each val in data
//- Your current template
@no_joke的回答很完美。为该答案添加一点解释:您 render
仅一次 。预先组合所有数据,然后将其传递给模板。对于 "spaghetti" 代码(我认为如果你指的是 callback hell), then promises or ES7's async-await 就是你的答案
我想用Jade渲染多个部分, 我需要一些脚本 之间。我先尝试了一些简单的事情:
// con is a mysql connection, res is a express render target
function main_page_jade(con, res)
{
con.query('SELECT * FROM ' + 'pg_user' , function(err,rows,fields) {
res.render( 'table.jade', {rows:rows, fields:fields, title:'DB User'} );
con.query('SELECT * FROM ' + 'pg_comp' , function(err,rows,fields) {
res.render( 'table.jade', {rows:rows, fields:fields, title:'DB Comp'} );
});
});
}
这根本行不通,所以我用谷歌搜索了一下,建议似乎是
令人费解的(实际上,意大利面)。我是 node/js/jade 的新手(刚接触 10 天),
可能有点 C++ 偏见(比如 20 年偏见),所以我的问题是;
如何在 node
尝试这样的事情:
function main_page_jade(con, res) {
var data = [];
con.query('SELECT * FROM ' + 'pg_user' , function(err,rows,fields) {
data.push({rows:rows, fields:fields, title:'DB User'});
con.query('SELECT * FROM ' + 'pg_comp' , function(err,rows,fields) {
data.push({rows:rows, fields:fields, title:'DB Comp'});
res.render('index', {data: data});
});
});
}
在你的 jade 模板中:
each val in data
//- Your current template
@no_joke的回答很完美。为该答案添加一点解释:您 render
仅一次 。预先组合所有数据,然后将其传递给模板。对于 "spaghetti" 代码(我认为如果你指的是 callback hell), then promises or ES7's async-await 就是你的答案