15

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

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

但我不想将它传递给每个视图;如果我忘记了它,我的应用程序会在主布局中使用时中断。那么如何确保它始终可用呢?

4

2 回答 2

20

Helpers are removed from Express 3 or 4.

Kindly use app.locals

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

The app.locals object is a JavaScript Object. The properties added to it will be exposed as local variables within the application.

So you can use app.locals in any view files, Jade or EJS;

moment().format('YYYY-MM-DD h:mm:ss');
于 2014-05-13T10:29:28.307 回答
8

dynamicHelpers尽管有关文档似乎已从 Express 文档中神秘消失,但这个答案让我指出了正确的方向。

另外,我不需要动态助手,只需要静态助手(无法访问请求/响应)。所以我在黑暗中刺了一下它的名字:

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

奇迹般有效!moment现在在我的所有视图中都可用。

于 2013-01-14T01:18:02.197 回答