Почему Multer должен загружать файлы перед любой операцией? - PullRequest
0 голосов
/ 30 августа 2018

Они работают так, как Малтер работает поверх экспресса, - почему Малтер должен предшествовать контроллеру в цепочке промежуточных программ, что, по замыслу, заставляет сервер загружать данные еще до того, как будет проверена работа БД?

Например, если для статей выполнялась операция публикации, и она содержит набор полей, одно из которых - файл.

articleModel{title:String,image:String};
router.post('/', multer, articleController.createArticle);

Теперь, когда запрос приходит, первым делом в цепочке загружается файл в запросе, но что, если при выполнении записи в БД произошла ошибка, такая как проверка или даже дублирование, что если я будет обновлять только заголовок статьи? старые файлы будут загружены снова?

Как заставить multer загружать файлы в ответ на обратный вызов операции http?

1 Ответ

0 голосов
/ 01 сентября 2018

Вы действительно можете сделать все, прежде чем Малтер действительно обработает изображение:

var upload = multer({
  dest: 'uploads/',
  fileFilter: function (req, file, cb) {
    // only images are allowed
    var filetypes = /jpeg|jpg|png/;
    var mimetype = filetypes.test(file.mimetype);
    var extname = filetypes.test(path.extname(file.originalname).toLowerCase());

    if (mimetype && extname) {
      return cb(null, true);
    }
    cb("Error");
  }
}).single('localImg');

app.post('/api/file', checkBody, auth, uploadFile, controller.aController);

Возьмем, к примеру, этот код, вы можете выполнять любые действия промежуточного ПО ДО того, как multer обработает ваш файл, но multer - это библиотека для обработки multipart / form-data , не только файлы, люди используют multipart для отправка файлов в основном, но вы также можете отправлять все виды данных, и они будут добавлять их в тело (req.body)

Ваш вопрос: «Почему Multer должен загружать файлы перед любой операцией?» Вы можете выполнить multer, когда захотите, но multer обработает запрос и отправит ваши данные в тело. Если вам не нужны данные о теле из первых рук, вам нужен multer, чтобы быть в первом промежуточном программном обеспечении.

Ваш другой вопрос: «что, если я собираюсь обновить только заголовок статьи? Старые файлы будут загружены снова?»

Нет, он будет загружен один раз, если есть какие-либо проблемы с базой данных, любая ошибка или отклонение, вы всегда можете использовать файловую систему (fs) для удаления файла с вашего сервера, если вы уже загрузили его на третий партийная система, вы можете удалить ее.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...