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

mpe*_*pen 15 node.js express pug

我刚安装了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")
Run Code Online (Sandbox Code Playgroud)

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

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


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

var server = express.createServer();
server.configure(function () {
    server.set('view engine', 'jade');
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

lij*_*nma 20

帮助从Express 3或4中删除.

请使用 app.locals

app.locals.moment = require('moment');
Run Code Online (Sandbox Code Playgroud)

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

所以你可以app.locals在任何视图文件中使用,Jade或者EJS;

moment().format('YYYY-MM-DD h:mm:ss');
Run Code Online (Sandbox Code Playgroud)


mpe*_*pen 8

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

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

server.helpers({
    moment: require('moment')
});
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!moment现在我的所有观点都可以使用.

  • Helpers概念已从Express 3中删除."静态助手"的含义是[`app.locals`](http://expressjs.com/api.html#app.locals)(`app.locals.moment =需要( '瞬间');`).对于`.dynamicHelpers`使用中间件. (14认同)