Node js 14일차
multer와 sharp를 이용한 이미지
../routes/users.js
>>> npm i multer sharp
router
.route('/uploadImg')
.post(auth, upload.single('img'), uploadImg, errorHandler)
.delete(auth, deleteImg);
router.route('/:id/avatar').get(getImg);
../models/users.js
const sharp = require('sharp');
exports.uploadImg = async (req, res) => {
// console.log(req.file);
const buffer = await sharp(req.file.buffer)
.resize({ width: 250, height: 250 })
.png()
.toBuffer();
req.user.avatar = buffer;
await req.user.save();
return res.send();
};
exports.deleteImg = async (req, res) => {
req.user.avatar = undefined;
await req.user.save();
return res.send();
};
exports.getImg = async (req, res) => {
const id = req.params.id;
try {
const user = await User.findById(id);
if (!user || !user.avatar) {
throw new Error();
}
res.set('Content-Type', 'image/png');
return res.send(user.avatar);
// res.set('Content-Type', 'application/json');
} catch (e) {
return res.status(404).send;
}
};
../lib/multer.js
const multer = require('multer');
const upload = multer({
// dest: 'img',
limits: {
fileSize: 10000000,
},
fileFilter(req, file, cb) {
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('Please upload an image (jpg, jpeg, png)'));
}
cb(undefined, true);
},
});
module.exports = { upload };
DB에는 존재 하지만 안보여줄 Data
../models/users.js
UserSchema.methods.toJSON = function () {
const user = this;
const userObject = user.toObject();
delete userObject.password;
delete userObject.token;
delete userObject.avatar;
return userObject;
};