使用multer和节点无法正确上传文件

时间:2020-03-13 03:13:36

标签: javascript node.js axios multer

我正在发布请求,以创建一个填充一些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 :(得分:0)

这是一个简单的错误,我只是忘记通过

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);
  });