Как включить серверный script в шаблон Jade?
Я только что установил 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")
Чтобы быть ясным, я хочу, чтобы дата была отформатирована на стороне сервера, а затем отправлена клиенту как отображаемая строка.
Итак, как мне сделать библиотеку JavaScript доступной внутри шаблона Jade?
Я должен заметить, что я использую это с помощью 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
Этот ответ заставлял меня указывать в правильном направлении, хотя документация на dynamicHelpers
, похоже, таинственно исчезла из документации Express.
Кроме того, мне не нужен динамический помощник, просто статический (без доступа к запросу/ответу). Поэтому я взял удар в темноте, как он будет называться:
server.helpers({
moment: require('moment')
});
Работает как шарм! moment
теперь доступен во всех моих представлениях.