item.js

김형우·2021년 12월 29일
0

node.js

목록 보기
13/26

물품등록

0. config/db.js

나중에 서버를 바꾸거나 DB를 바꿀때 관리하기 쉽도록 db.js 파일을 만들어서 따로 관리한다.

module.exports = {
    // mongodb://아이디:암호@서버주소:포트번호/DB명
    mongodbURL : 'mongodb://id201:pw201@1.234.5.158:37017/db201',
    mongoUSER : 'id201',
    mongoDB : 'db201',
    mongoPW : 'pw201',
    // collection도 여기에 넣으면 좋음.
    itemCollection : 'item',
    itemSeqCollection : 'seqitem'

}

00. 중요!

1. config/db.js의 내용 불러오기

const DBURL = require('../config/db').mongodbURL;
const DBNAME = require('../config/db').mongoDB;
const SEQCOLL = require('../config/db').itemSeqCollection;
const ITEMCOLL = require('../config/db').itemCollection;

2. 이미지 첨부를 위한 모듈 설치

CMD> npm i multer --save
const multer = require('multer'); : 불러오기

3. 특정폴더에 파일을 보관 or 메모리(DB에 저장)

const upload = multer({storage:multer.memoryStorage()}); : 메모리(DB에 저장)

4. /insert = 물품번호 1씩 증가

  • 물품등록(POST) : localhost:3000/item/insert
  • 이미지1, 물품번호, 물품명, 물품내용, 물품가격, 재고수량, 등록일(x)
  • DB접속 -> DB선택 -> 컬렉션(board)
4-1. DB접속

const dbConn = await db.connect(DBURL);
: config/db.js의 내용 중 DBURL 불러오기

4-2. DB선택 + 컬렉션

const coll = dbConn.db(DBNAME).collection(SEQCOLL);
: config/db.js의 내용 중 DBNAME, SEQCOLL 불러오기

4-3. findOneAndUpdate

const result = await coll.findOneAndUpdate
: 하나만 업데이트 함.
: 형태는
( { 조건 }, {업데이트 되는 항목} )
( { _id : 'SEQ_ITEM_NO'}, { $inc : { seq : 1 } } );
: 'SEQ_ITEM_NO'를 1 증가시킴

여기까지 물품번호 1씩 증가 시퀀스


5. 물품추가 (item)

  • 물품등록(POST) : localhost:3000/item/insert
  • 이미지1, 물품번호, 물품명, 물품내용, 물품가격, 재고수량, 등록일(x)
  • DB접속 -> DB선택 -> 컬렉션(board)
  • router.post('/insert', upload.single("file"), async function(req, res, next) 에서 upload.single("file") 부분 때문에 field명 file 아래에 이미지파일 정모가 생성됨.
  • console.log(req); 했을 경우 나타나는 로그 // 중요!!
  • obj 정의
const obj = {
            _id : result.value.seq, 		// 물품번호 (자동부여)
            name : req.body.name,   		// 물품명
            content : req.body.content, 	// 물품내용
            price : req.body.price, 		// 가격
            quantity : req.body.quantity, 	//수량

            //upload.single("file") 때문에 req.file 아래에 생성됨
            filename : req.file.originalname,
            filetype : req.file.mimetype,
            filedata : req.file.buffer,
            filesize : req.file.size,
            regdate : new Date(),
        };
5-1. DB선택 -> 컬렉션

const coll1 = dbConn.db(DBNAME).collection(ITEMCOLL);
: config/db.js의 내용 중 DBNAME, ITEMCOLL 불러오기

5-2. insertOne(obj)
  • obj의 모든 항목을 업로드 (추가) 한다.

POSTMAN

1. localhost:3000/item/insert

  • 파일을 첨부하는 경우 form-data로 설정한다.
  • key -> file 부분 뒤 공백에 text, file 형태변환하는 버튼이 숨어있다.

NoSQLBooster

1. 새 시퀀스를 만든다.

  • 관리하기 쉽도록 한 시퀀스에 세가지 항목을 넣는다.
  • 'SEQ_BOARD_NO': 게시물 번호
  • 'SEQ_BOARDREPLY_NO' : 게시물 댓글 번호
  • 'SEQ_ITEM_NO' : 물품수량
db.sequence.insert([
    { _id : 'SEQ_BOARD_NO', seq : 1 },
    { _id : 'SEQ_BOARDREPLY_NO', seq : 1 },
    { _id : 'SEQ_ITEM_NO', seq : 10001 },
]);

2. /insert 결과

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

// npm i mongodb --save
const db = require('mongodb').MongoClient;

const DBURL = require('../config/db').mongodbURL;
const DBNAME = require('../config/db').mongoDB;
const SEQCOLL = require('../config/db').itemSeqCollection;
const ITEMCOLL = require('../config/db').itemCollection;


// CMD> npm i multer --save 
const multer = require('multer');
// 특정폴더에 파일을 보관 or 메모리(DB에 저장)
const upload = multer({storage:multer.memoryStorage()});



// 물품등록(POST) : localhost:3000/item/insert
// 이미지1, 물품코드(x), 물품명, 물품내용, 물품가격, 재고수량, 등록일(x)
router.post('/insert', upload.single("file"), async function(req, res, next) {
    try {
        const dbConn = await db.connect(DBURL);        
        const coll = dbConn.db(DBNAME).collection(SEQCOLL);        
        const result = await coll.findOneAndUpdate(
            { _id : 'SEQ_ITEM_NO'}, { $inc : { seq : 1 } }
        );
        console.log(result.value.seq);

        const obj = {
            _id : result.value.seq, // 물품번호 (자동부여)
            name : req.body.name,   // 물품명, 물품내용, 가격, 수량
            content : req.body.content,
            price : req.body.price,
            quantity : req.body.quantity,

            //upload.single("file") 때문에 req.file 아래에 생성됨
            filename : req.file.originalname,
            filetype : req.file.mimetype,
            filedata : req.file.buffer,
            filesize : req.file.size,
            regdate : new Date(),
        };

        const coll1 = dbConn.db(DBNAME).collection(ITEMCOLL);
        const result1 = await coll1.insertOne(obj);
        if(result1.insertedId > 0){
            return res.send({status:200});
        }
        return send({status:200});
        

        // console.log(req); // 중요!
        // return res.send({status:200});
    } 
    catch (err) {
        console.error(err);
        return res.send({status:-1, result : err});
    }
});

module.exports = router;
profile
The best

0개의 댓글