экспресс-парсер и проблема получения значения мультитера? - PullRequest
0 голосов
/ 09 октября 2018

Я отправляю пост-запрос /product/create с некоторым значением и изображением.

, если я поддерживаю каждое значение до

upload(req, res, (err) => {})

, оно отображается правильно без информации об изображении.

если я получу значение после upload(req, res, (err) => {})

Никакого значения не отображается.

Полный код почтового запроса:

  app.post('/product/create', (req, res) => {
      let filename;
      upload(req, res, (err) => {
        if(err){
          res.render('index', {
            msg: err
          });
        } else {
          if(req.file == undefined){
            res.render('index', {
              msg: 'Error: No File Selected!'
            });
          } else {
            res.render('index', {
              msg: 'File Uploaded!',
              filename = req.file.filename;
            });
          }
        }
      });

      const product = {
        title : req.body.title,
        desc  : req.body.desc,
        image  : filename,
      }
    });

Настройка Multer:

const storage = multer.diskStorage({
  destination: './public/uploads/',
  filename: function(req, file, cb){
    cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
  }
});


const upload = multer({
  storage: storage,
  limits:{fileSize: 1000000},
  fileFilter: function(req, file, cb){
    checkFileType(file, cb);
  }
}).single('myImage');


function checkFileType(file, cb){

  const filetypes = /jpeg|jpg|png|gif/;

  const extname = filetypes.test(path.extname(file.originalname).toLowerCase());

  const mimetype = filetypes.test(file.mimetype);

  if(mimetype && extname){
    return cb(null,true);
  } else {
    cb('Error: Images Only!');
  }
}

1 Ответ

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

Multer не поддерживает req.file.filename вне функции загрузки.В качестве имени файла, исходного имени, имени поля и т. Д. Используется встроенный API-интерфейс multer.Ограничена только функция загрузки.

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

...