我如何将变量作为全局传递给玉模板

时间:2014-06-19 23:43:29

标签: javascript node.js express pug

我希望能够传递一个全局对象,我稍后会将其用于任何玉石模板

让我们说:

app.get("/", function(req, res){

    var options = {
        chGlobal : {// this is the object i want to be a global
            "property1" : 1,
            "property2" : 2,
            "property3" : 3,
        }
    };

    jade.renderFile(__dirname +'/tpl/main.jade', options, function (err, html) {
        console.log(err, html);
        if (err)
        {
            throw err
        }
        else
        {
            res.send(html);
        }
    });
});

我希望能够使用" chGlobal"在其他加载的脚本中。好像chGlobal是在全球范围内定义的。

由于

1 个答案:

答案 0 :(得分:4)

如果你通过express使用jade作为视图引擎,如下所示:

app.set('views', __dirname); // this will be where your views are located.
app.set('view engine', 'jade');

您可以使用 res.locals.variable 指定局部变量。

实施例)

app.get("/", function(req, res){

    res.locals.options = {
        chGlobal : {// this is the object i want to be a global
            "property1" : 1,
            "property2" : 2,
            "property3" : 3,
        }
    };

    res.render('main');
});

然后在Jade中,您可以访问选项变量。

您可以编写一个中间件来自动附加全局变量,如下所示:

app.get("/", registerGlobals, function(req, res) {

然后中间件功能将是:

function registerGlobals(req, res, next) {
    res.locals.options = {
        chGlobal : {// this is the object i want to be a global
            "property1" : 1,
            "property2" : 2,
            "property3" : 3,
        }
    };

    next();
}

有关如何在这里使用jade的更多教程:http://runnable.com/UTlPPF-f2W1TAAEe/render-jade-with-express-for-node-js