Ответ 1
Обновление:
Проверка выполняется до того, как пользователь определил крючки. Вы можете следить за этот пост github, где заявляет участник,
не выполняет этого. валидация сначала дает нам шанс остановить прежде чем переходить к пользовательским перехватам, которые могут включать async обновления для других коллекций.
если нам нужна проверка для повторного запуска после внесения изменений изнутри крюк, мы всегда можем запустить вручную
this.validate(next)
.
Устаревшие:
Да, есть небольшая разница, которую я знаю.
Предварительные крючки выполняются перед проверкой.
В github есть закрытая проблема, требующая проверки перед предварительными перехватами, https://github.com/Automattic/mongoose/issues/400.
А также есть причина не иметь валидацию перед предварительными перехватами, указанную в той же ссылке @kamholz:
Скажем, у вас есть два поля: foo и fooSort, оба они требуются. fooSort - это с пониженной или иначе преобразованной версией foo, которая будет использоваться в сортировка. Поскольку fooSort может быть автоматически сгенерирован, это имеет смысл чтобы сделать это в кэше предварительного сохранения. Но поскольку проверка выполняется сначала, это будет сбой перед запуском предварительного сохранения и возможность заполнить Значение fooSort. Это не вопрос проверки работоспособности снова вручную.
Опять же, если вы хотите что-то подтвердить, а затем нужно проверить для подтверждения:
UserSchema.post('validate', function(next){
console.log("post validate called");
next();
});
<ч/" > Итак, для сводки, одна разница, которую я вижу,
-
вы можете использовать оба метода до тех пор, пока вы получите входные данные для сохранения в db напрямую, не изменяя ничего (только проверка).
-
Если вы что-то изменяете, вам нужно использовать pre save hook.
Забастовкa >