통합구현 #13 - 이미지(back)

김형우·2022년 3월 18일
0

mongoose + vue.js

목록 보기
14/15

exp_20220311

0. 라이브러리 설치

-- 파일첨부 모듈
CMD> npm i multer --save

-- 스케쥴링 모듈
CMD> npm i node-cron --save

-- 서버구동
CMD> nodemon --inspect ./bin/www


1. models/book1.js

  1. Schema = entity

  2. 책코드, 책제목, 파일, 파일크기, 파일타입, 파일명, 등록일

  3. Sequence : SEQ_BOOK10_NO

  4. Collection : book10

// 라이브러리 가져오기
// npm i mongoose --save
var mongoose = require('mongoose');
// entity에 해당하는것 만들기
var Schema = mongoose.Schema;

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

// + Schema = entity
// 책코드, 책제목, 파일, 파일크기, 파일타입, 파일명, 등록일
var bookSchema = new Schema({
    _id : Number,
    title : {type : String, default : ''},
    filedata : {type : Buffer, default : null},
    filesize : {type : Number, default : 0},
    filetype : {type : String, default : ''},
    filename : {type : String, default : ''},
    regdate : {type : Date, default:Date.now}
});

// 시퀀스 사용설정
// '_id'에는 시퀀스를 써서 자동적으로 생성된 데이터가 들어갈 것이다.
bookSchema.plugin(AutoIncrement, {id : 'SEQ_BOOK10_NO', inc_field : '_id'});

// 컬렉션 book8에 bookSchema 형태로 넣겠다.
module.exports = mongoose.model('book10', bookSchema);

2. app.js

  • routes 등록
var uploadRouter = require('./routes/upload');
app.use('/upload', uploadRouter);

3. routes/upload.js

  1. 이미지 첨부 모듈
    : var multer = require('multer');
    : var upload = multer({storage : multer.memoryStorage()});

  2. model import
    : var Book1 = require('../models/book1');

var express = require('express');
var router = express.Router();

// 이미지첨부 모듈
var multer = require('multer');
var upload = multer({storage : multer.memoryStorage()});

// model import
var Book1 = require('../models/book1');

// 이미지등록
// 127.0.0.1:3000/upload/insert
router.post('/insert', upload.single("img"), async function(req, res, next) {
    try {
        console.log("req.body ===> ",req.body);
        console.log("req.file ===> ",req.file);
        
        var book = new Book1();
        book.title = req.body.title;
        if (typeof req.file !== 'undefined') {
            book.filedata = req.file.buffer;
            book.filesize = req.file.size
            book.filetype = req.file.mimetype
            book.filename = req.file.originalname
        }

        const result = await book.save();
        console.log('result ===> ',result);
        return res.send({status:200});
    } catch (e) {
        console.error(e);
        return res.send({status:-1});
    }
});

// 이미지 url 만들기
// 127.0.0.1:3000/upload/image?no=1
// 프론트 : <img src="/upload/image?no=1"/>  // src는 GET으로
router.get('/image', async function(req, res, next) {
    try {
        const query = {_id : Number(req.query.no)};
        const book = await Book1.findOne(query).select({title:0});
        console.log('/image/book ===> ',book);
        res.contentType(book.filetype);
        return res.send(book.filedata);
    } catch (e) {
        console.error(e);
        return res.send({status:-1});
    }
});

module.exports = router;
profile
The best

0개의 댓글