Node js 14일차- img crop(multer, sharp)

00_8_3·2020년 11월 29일
0

간단 Node

목록 보기
15/27

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

0개의 댓글