Я делаю почтовый запрос на создание «сотрудника», заполняющего некоторые данные 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);
});