如何在Jade模板中嵌入服务器端脚本?

15

我刚刚安装了 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个回答

20

在 Express 3 或 4 中已删除 Helpers。

请使用app.locals

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

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

因此,您可以在任何视图文件中使用app.locals,包括JadeEJS

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

8

这个答案引导我朝着正确的方向前进,尽管Express文档中关于dynamicHelpers的说明似乎神秘地消失了。

另外,我不需要一个动态 helper,只需要一个静态的(没有访问请求/响应)。因此我猜测它可能被称为:

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

非常好用!moment现在可以在我所有的视图中使用。


14
Express 3中已经移除了Helpers概念。所谓“静态helpers”指的是app.localsapp.locals.moment = require('moment');)。对于.dynamicHelpers,请使用中间件。 - Aleksei Zabrodskii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接