CMD> npm i multer --save
// 엔티티에 해당하는 것임
// 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: ''},
다음이 추가되었다.
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});
}
});
기존에 쓰던 방식과 같음.
스키마 쓰기
// 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);