Файл и текст не загружаются одновременно на body-parser и multer? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть возможность загружать текст и изображение одновременно.Я использую multer и body-parser.но когда я даю enctype="multipart/form-data" для формирования req.body, не получая никакого значения.

<form method="post" action="/admin/dashbord/product" enctype="multipart/formdata">

<div class="form-group">
     <label for="source">Title</label>
       <input type="text" name="title" class="form-control" id="source" value="{{product.title}}" placeholder="Enter Title">
 </div>


 <div class="form-group">
    <label for="source">Image</label>
     <input type="file" name="image" class="form-control" id="source" placeholder="Enter Title">
 </div>

 <button type="submit" class="btn btn-primary">Submit</button>
 </form>

Маршрутизатор:

 router.post('/product', function (req, res) {
       var filename;
       upload(req, res, (err) => {
         filename = req.file.filename

    })

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

       console.log(product)
    })

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('image');

  // Check File Type
  function checkFileType(file, cb){
    // Allowed ext
    const filetypes = /jpeg|jpg|png|gif/;
    // Check ext
    const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
    // Check mime
    const mimetype = filetypes.test(file.mimetype);

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

, если я работаю без enctype, анализатор тела работает хорошо. В противном случае получаем неопределенное значение.

, если я консоль imagename в upload, функция работает хорошо снаружистановится неопределенным.

1 Ответ

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

напишите все это в вашей функции загрузки:

 upload(req, res, (err) => {
      filename = req.file.filename;
      const product = {
        title: req.body.title,
        image: filename,
      };

       console.log(product)
})

очень просто, вы просто пропустили это.

...