Как сохранить дату рождения в Mongoose без выдачи ошибки проверки - PullRequest
0 голосов
/ 21 июня 2019

В моей модели User в Mongoose у меня есть простое поле dob без проверки формата:

dob: {
    type: Date,
    alias: 'birthdate'
  },

В другом месте моего кода я форматирую три отдельных поля, введенных пользователем, для дня, месяца и года. Я возвращаю это как новый Date (), но с форматом YYYY-MM-DD, чтобы избежать каких-либо странных осложнений часового пояса. Дата - это дата, а время не имеет значения.

exports.formatDob = function (day, month, year) {
  let dob = new Date( parseInt(year), parseInt(month) - 1, parseInt(day), 0, 0, 0, 0 );
  return new Date(dob, '<YYYY-MM-DD>');
}

Когда я пытаюсь сохранить эту отформатированную дату в Mongoose, я получаю следующую ошибку в моей консоли:

(узел: 32307) UnhandledPromiseRejectionWarning: ValidationError: User Ошибка проверки: dob: Ошибка приведения к значению «Недопустимая дата» по пути "доб"

Что я делаю не так?

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете использовать Momentjs , всегда рекомендуется при работе с датами.

Однако мы можем обойти это так же просто, как работать с доступными методами Date obj api, например, если мы хотим вернуть формат YYYY-MM-DD из объекта Date, мы можем просто сделать следующее:

let dob = new Date( parseInt(year), parseInt(month) - 1, parseInt(day));
return dob.getFullYear() + '-' + (dob.getMonth() + 1) + '-' + dob.getDate();

let dob = new Date();
console.log( dob.getFullYear() + '-' + (dob.getMonth() + 1) + '-' + dob.getDate() );

Обратите внимание, что мы добавили + 1 к getMonth методу, потому что он возвращает значение для 0-11, а также мы добавили это выражение в скобки, чтобы оно не оценивалось как строка.

...