Помощник на руле показывает одну и ту же дату для каждого сообщения

#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 да, мне просто интересно, почему это работает с обоими. Спасибо!!