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