Это странный вопрос, но следуйте за мной. У меня есть nodejs-сервер с явным приложением. Внутри приложения, я устанавливаю мои местные житель следующим образом:NodeJS Express app.locals не доступны непосредственно в функции
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, ...);
Сладкий, спасибо. Имеет смысл. Опубликованный код был просто упрощением моего настоящего, но вы сделали очень важную часть! – Vadym