#node.js #mongodb #express #mongoose #handlebars.js
#node.js #mongodb #экспресс #мангуст #handlebars.js
Вопрос:
Итак, у меня есть сайт, на котором пользователи могут создавать сообщения, и я хочу, чтобы дата, на которую они это сделали, отображалась в сообщении. Для этого я использую momentjs и помощник на руле.
helpers/hbs.js
formatDate: function (date, format) {
return moment(date).format(format);
},
и мой руль {{{formatDate date 'MMMM Do YYYY, h:mm a'}}}
Просто чтобы отметить, что я уже зарегистрировал handlebar helper
const { formatDate, ifCond } = require('./helpers/hbs');
app.engine(
'.hbs',
exphbs({
helpers: { formatDate, ifCond },
defualtLayout: 'main',
extname: '.hbs',
})
);
Проблема в том, что он показывает одну и ту же дату для каждого сообщения. Когда я помещаю mongoose createdAt, он отображает правильную дату для каждого сообщения, но в неформатированном виде. Я искал решения и до сих пор не могу его найти.
Комментарии:
1. Когда он показывает одну и ту же дату для каждого сообщения, какую дату он показывает?
2. Он показывает текущую дату
3. Как выглядит значение
date
аргумента дляformatDate
помощника, если бы вы это сделалиconsole.log(date)
?4. это не определено
5. @76484 Я думаю, проблема может заключаться в том, что дата не указана в сообщениях. Однако, когда я делаю что-то вроде
{{posts formatDate date h:mm a'}}
, я получаю сообщение об ошибке
Ответ №1:
В основном моя проблема заключалась в том, что мне пришлось поместить createdAt в мой обработчик hbs и индексный файл.
// createdAt is the date saved in mongodb
formatDate: function (createdAt, formatDate) {
console.log(createdAt);
return moment(createdAt).format(formatDate);
},
{{formatDate createdAt 'MMMM Do YYYY, h:mm a'}}
Комментарии:
1. Просто для ясности: аргумент должен быть
createdAt
.formatDate
Функцию можно было бы оставить с параметромdate
.2. @76484 да, мне просто интересно, почему это работает с обоими. Спасибо!!