我正在发布请求,以创建一个填充一些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);
});
答案 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);
});