Как использовать файл загрузки мультитера без промежуточного программного обеспечения

Я новичок в NodeJS, я разрабатываю приложение, в котором я создал форму регистрации. Для загрузки изображений я использую multer. И для проверки формы я использую экспресс-валидатор. Проблема со мной заключается в том, что перед проверкой формы файл загружен. Итак, если пользователь не создал учетную запись из-за некоторых ошибок проверки, но файл отправляется на загрузку. Проблема в том, что я получаю загрузку файла для каждой отправки формы независимо от того, успешно ли создана учетная запись или нет.

Что я хочу сделать?

Я хочу сохранить файл только тогда, когда пользователь успешно создал учетную запись. Итак, есть ли в любом случае использовать multer внутри обратного вызова, поэтому, когда мои проверки формы завершены, файлы отправляются. Я не могу использовать промежуточное программное обеспечение экспресс-проверки между промежуточным программным обеспечением multer и окончательным обратным вызовом, потому что экспресс-проверка передает ошибки на следующий обратный вызов. Вот мой код

router.post('/registeration', multerMiddleware, validationMiddleware, finalCallback)

validationMiddleware - это массив.

var multer = require('multer');
var multerMiddleware= multer({dest: './profile-images', fileFilter: userRegisteration.fileFilter}).single('profileImage');
var validationMiddleware = [check(...), check(...),...]
var finalCallback = function (req, res, next) {
 // code is here
}

1 ответ

Экспресс-маршрутизатор выполняет промежуточные программы в той же последовательности, в которой вы их монтируете

router.post('/registeration', multerMiddleware, validationMiddleware, finalCallback)

Так что ваши multerMiddleware выполняется (и, следовательно, сохраняется файл) до вашего validationMiddleware сделал проверку.

Измените код на:

router.post('/registeration', validationMiddleware,multerMiddleware, finalCallback)

Так, multerMiddleware сохранит файл только после подтверждения запроса

Другие вопросы по тегам