Не удается получить правильную загрузку файла, используя multer и node - PullRequest
2 голосов
/ 13 марта 2020

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

employeeRoute. js:

router
    .route('/employee')
    .get(employeeController.getAllEmployee)
    .post(
    authController.protect,
    authController.restrictTo('admin'),
    employeeController.uploadEmployeephoto,
    employeeController.resizeEmployeePhoto,
    employeeController.createEmployee
    );

employeeController. js:

const multerStorage = multer.memoryStorage();

const multerFilter = (req, file, cb) => {
  if(file.mimetype.startsWith('image')){
    cb(null, true)
  } else {
    cb(new AppError('Not an image!', 400), false);
  }
};

const upload = multer({
  storage: multerStorage,
  fileFilter: multerFilter
});

exports.uploadEmployeephoto = upload.single('photo');

exports.resizeEmployeePhoto = (req, res, next) => {
  if(!req.file) return next();

  req.file.filename = `employee-photo-${Date.now()}.jpeg`;

  sharp(req.file.buffer)
  .resize(512,512)
  .toFormat('jpeg')
  .jpeg({quality:90})
  .toFile(`public/images/our-experts/${req.file.filename}`);

  next();
}
exports.createEmployee = factory.createOne(Employee);

фабрика

exports.createOne = Model =>
  catchAsync(async (req, res, next) => {
    console.log(req.file);

    const doc = await Model.create({
      ...req.body,
      path: req.file.path
    });
    res.status(201).json({
      status: 'success',
      data: {
        data: doc
      }
    });
    console.log(req.body);
  });

enter image description here

1 Ответ

0 голосов
/ 16 марта 2020

Это была простая ошибка, я просто забыл передать

req.body.photo = req.file.filename

exports.createOne = Model =>
  catchAsync(async (req, res, next) => {
    if(req.file) req.body.photo = req.file.filename;

    const doc = await Model.create(req.body);
    res.status(201).json({
      status: 'success',
      data: {
        data: doc
      }
    });
    console.log(req.body);
  });
...