如何在Jade模板中包含服务器端脚本?

时间:2013-01-14 00:50:28

标签: node.js express pug

我刚刚安装了moment.js;现在我想在我的Jade模板中访问moment。例如:

.main-content
    .container
        .access-details.clearfix
            .left
                div Logged in: <b>#{user.name}</b>
                div Access Lvl: #{user.accessLevel}
            .right
                div= moment().format("dddd, MMMM Do YYYY, h:mm:ss a")

要清楚,我希望将日期格式化为服务器端,然后将其作为呈现的字符串发送到客户端。

那么如何在Jade模板中创建一个JavaScript库?


我应该注意到我正在使用Express:

var server = express.createServer();
server.configure(function () {
    server.set('view engine', 'jade');

是否有一些选项我必须以某种方式告诉它包含哪些库?


刚刚发现,这与传递局部变量完全没什么不同。如,

server.get('/', function (req, res) {
    res.render('index', {
        locals: {
            moment: require('moment')
        }
    });
});

但我不想把它传递给每一个观点;如果我忘了它,我的应用程序会破坏,因为它在主要布局中使用。那么如何确保它始终可用?

2 个答案:

答案 0 :(得分:20)

从Express 3或4中删除助手。

请使用app.locals

app.locals.moment = require('moment');

app.locals对象是一个JavaScript对象。添加到其中的属性将作为应用程序中的局部变量公开。

因此,您可以在任何视图文件app.localsJade中使用EJS;

moment().format('YYYY-MM-DD h:mm:ss');

答案 1 :(得分:8)

This answer让我指出了正确的方向,尽管dynamicHelpers上的文档似乎从Express文档中神秘地消失了。

此外,我不需要动态帮助程序,只需要一个静态辅助程序(无法访问请求/响应)。所以我在暗处捅了一下它的名字:

server.helpers({
    moment: require('moment')
});

像魅力一样! moment现在可以在我的所有观看中使用。