如何在 Jade 模板中包含服务器端脚本?
Posted
技术标签:
【中文标题】如何在 Jade 模板中包含服务器端脚本?【英文标题】:How to include server-side script in Jade template? 【发布时间】: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')
);
);
但我不想将它传递给每个视图;如果我忘记了它,我的应用程序会在主布局中使用时中断。那么如何确保它始终可用?
【问题讨论】:
【参考方案1】:从 Express 3 或 4 中删除助手。
请使用app.locals
app.locals.moment = require('moment');
app.locals
对象是一个 JavaScript 对象。添加到其中的属性将作为应用程序中的局部变量公开。
因此您可以在任何视图文件中使用app.locals
,Jade
或EJS
;
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
,使用中间件。以上是关于如何在 Jade 模板中包含服务器端脚本?的主要内容,如果未能解决你的问题,请参考以下文章