스키마 방식으로 이미지 넘기기, 조회

이태규·2022년 3월 18일
0

express

목록 보기
27/28

1. cmd에서 import

CMD> npm i multer --save

2. 스키마(entity)만들기

// 엔티티에 해당하는 것임
// npm i mongoose --save
var mongoose = require('mongoose');

// npm i mongoose-sequence
const AutoIncrement = require('mongoose-sequence')(mongoose);

var Schema = mongoose.Schema;

// 책코드, 제목, 가격, 저자, 등록일
var bookSchema = new Schema({
    _id      : Number,
    title    : {type:String, default: ''},
    filedata : {type:Buffer, default: null},
    filesize : {type:Number, default: 0},
    filename : {type:String, default: ''},
    filetype : {type:String, default: ''},
    regdate  : {type:Date, default: Date.now}
});

// 시퀀스 사용 설정
bookSchema.plugin(AutoIncrement, {id:"SEQ_BOOK9_ID", inc_field : '_id'});

// 앞쪽이 컬렉션 이름, 컬렉션에 이런 모양을 구성하겠다 ( entity)
module.exports = mongoose.model('book9', bookSchema);

기존 스키마 방식으로 클래스를 만드는 것에서 달라진 점은

filedata : {type:Buffer, default: null},
filesize : {type:Number, default: 0},
filename : {type:String, default: ''},
filetype : {type:String, default: ''},

다음이 추가되었다.

3 . 만들기

const multer = require('multer');
const upload = multer({storage: multer.memoryStorage()});
var Book1 = require('../models/book1');
router.post('/insert', upload.single("img"), async function(req, res, next) {
    try {
        console.log(req.body);
        console.log(req.file)
        const book1 = new Book1()
        book1.title = req.body.title;

        if(typeof req.file !== 'undefined'){
            book1.filesize = req.file.size;
            book1.filename = req.file.originalname;
            book1.filetype = req.file.mimetype;
            book1.filedata = req.file.buffer;
        }
        await book1.save();
        
        return res.send({status : 200});        
        
    } 
    catch (error) {
        console.log(error)
        return res.send({status : -1});
    }
    
});

기존에 쓰던 방식과 같음.

4. 사용하기

스키마 쓰기


// 127.0.0.1:3000/upload/image?no=1
// <img src="/upload/image?no=1">
router.get('/image', upload.single("img"), async function(req, res, next) {
    try {
        const query = {_id: Number(req.query.no)}
        const book1 = await Book1.findOne(query).select({titke: 0})
        console.log(book1)
        res.contentType(book1.filetype);
        res.send(book1.filedata);
        return res.send({status : 200});
        
    } 
    catch (error) {
        console.log(error)
        return res.send({status : -1});
    }
});

기존의 것과 달라진 점은

기존 것

const code = Number(req.query.code);

        const dbconn = await db.connect(dburl);
        const collection = dbconn.db(dbname).collection('item1');
        const result = await collection.findOne(
            {_id: code},
            {projection:{filedata:1, filename:1, filetype:1, filesize:1}}
        )
        // console.log(result)

        res.contentType(result.filetype);
        return res.send(result.filedata.buffer)
res.send(result.filedata.buffer)

이 다음과 같이 바뀜

res.send(book1.filedata);
profile
한 걸음씩 나아가자

0개의 댓글