【发布时间】:2015-09-20 08:08:03
【问题描述】:
这是一个奇怪的问题,但请跟我来。我有一个带有 express 应用程序的 nodejs 服务器。在应用程序中,我将本地设置如下:
var moment = require('moment');
app.locals.moment = moment;
ejs 被渲染为:
exports.page = function (req, res) {
res.render('first-page');
};
然后,在我的 ejs 中,我有以下代码:
<%
if (!moment) {
throw new Error('moment is not defined');
}
function formatDate(date) {
return moment(date).format();
}
%>
<p><%= formatDate(1435856054045); %></p>
发生的有趣事情是那个时刻并没有引发异常。因此,正如文档所说,它被定义在 ejs 的范围内。但是,ejs 引发了一个异常,指出该时刻未在 formatDate 中定义。如果我将 formatDate 更改为以下,一切正常。
function formatDate(date) {
return locals.moment(date).format();
}
我的问题是,在 ejs 中定义的函数是如何确定范围的,以及应用于它们的上下文。 ejs 是否将不同的上下文应用于函数而不是浮动 javascript?我假设它做了类似formatDateFunctionPointer.call(ejsScope, ...);
【问题讨论】:
标签: node.js templates express scope ejs