链接玉器渲染,在node.js中使用express

时间:2015-11-10 11:57:52

标签: javascript node.js pug

我想用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年偏见),所以我的问题是;
如何在节点

中以一种导致良好设计的方式编写项目

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

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

在您的玉石模板中:

each val in data
   //- Your current template

答案 1 :(得分:1)

@ no_joke的答案是完美的。要为该答案添加一些解释:您render 仅一次。事先组合所有数据,然后将其传递给模板。对于" spaghetti"代码(我认为,如果您指的是callback hell),那么承诺或ES7's async-await就是您的回答