Установка статуса ответа с помощью Multer в Express? - PullRequest
0 голосов
/ 16 октября 2018

Я использую Multer в качестве промежуточного программного обеспечения Express.В моем примере я проверяю правильность расширения файла и mimetype (для волнового файла) и хочу ответить 415, если это не так.Однако я не знаю, как это сделать с помощью Multer fileFilter, поэтому я проверяю, существует ли файл в объекте запроса обработчика маршрутизатора, что немного неловко.Также, возможно, я хочу реализовать другие fileFilter и коды ошибок в будущем.Есть ли рекомендуемый шаблон для установки статусов ответов с помощью Multer в Express?

const upload = multer(
{
  dest: UPLOAD_PATH,
  fileFilter: function(req, file, cb) {
    const filetypes = /wave|wav/;
    const mimetype = filetypes.test(file.mimetype);
    const extname = filetypes.test(
        path.extname(file.originalname).toLowerCase());
    cb(null, (mimetype && extname));
  },
}
);

router.post('/', upload.single('wave'), (req, res) => {
  const file = req.file;
  if (!file) {
    return res.status(415).send('Only audio/wav files are supported.');
  }
  // Do some async task with file
  return res.sendStatus(200);
});

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете сделать это следующим образом:

const upload = multer({
    dest: 'uploads/',
    fileFilter: function (req, file, cb) {
        const filetypes = /wave|wav/;
        const mimetype = filetypes.test(file.mimetype);
        const extname = filetypes.test(
            path.extname(file.originalname).toLowerCase());

        if (mimetype && extname) {
            cb(undefined, true);
        } else {
            req.notWAVEMimeType = 'Only audio/wav files are supported.';
            return cb(undefined, false);
        }
    }
});

router.post('/', upload.single('wave'), (req, res) => {
    if (req.notWAVEMimeType) {
        return res.status(415).end(req.notWAVEMimeType);
    }

    // Do some async task with file
    return res.sendStatus(200);
});

Свойство notWAVEMimeType объекта запроса позволяет возвращать сообщение об ошибке методу POST.В соответствии с этим вы можете добавить другие типы пантомимы и впоследствии проверить наличие соответствующего свойства req.

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