AND4011002849:
Estoy haciendo una solicitud posterior para crear un "empleado" llenar algunos FormData, y en esta forma hay un campo para la carga de imágenes, el problema es que no importa qué imagen elijo siempre me dan la imagen por defecto de la respuesta, pero el nombre del archivo se guarda correctamente en mi directorio local.
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);
fábrica
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);
});
AND4011002849:
Fue un simple error, sólo estaba olvidando que pasar
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);
});