【问题标题】:How to include server-side script in Jade template?如何在 Jade 模板中包含服务器端脚本?
【发布时间】:2012-12-27 22:01:33
【问题描述】:

我刚刚安装了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')
        }
    });
});

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

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    从 Express 3 或 4 中删除助手。

    请使用app.locals

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

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

    因此您可以在任何视图文件中使用app.localsJadeEJS

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

    【讨论】:

      【解决方案2】:

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

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

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

      像魅力一样工作! moment 现在在我的所有视图中都可用。

      【讨论】:

      • Helpers 概念已从 Express 3 中删除。您所说的“静态助手”是指app.locals (app.locals.moment = require('moment');)。对于.dynamicHelpers,使用中间件。
      猜你喜欢
      • 2012-11-28
      • 2016-03-24
      • 2016-02-04
      • 2023-03-26
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多