item.js

김형우·2021년 12월 31일
0

node.js

목록 보기
17/26

물품일괄등록 - POST

1. localhost:3000/item/insertbatch

  • router.post('/insertbatch', upload.array("file"), async function(req, res, next) {
    : POST
    : upload.array("file") = 배열형식으로 "file"에 들어갔다가 req로 감.

2. DB + collection

const dbConn = await db.connect(DBURL);        
const coll = dbConn.db(DBNAME).collection(SEQCOLL);

3. 로그 찍어보기

  • console.log(req);

  • console.log(req.files);
    : 1개일때 : file // 여러개일때 : files
    : files는 배열 형식으로 들어온다. // files : [{ },{ }]

  • console.log(req.body);
    : 물품명, 내용, 수량, 가격
    : body도 배열형식으로 들어온다. // body : [{ },{ }]

  • file 첨부 안됐을때
    : 빈 배열 형식 // [ ]

4. 배열로 들어온 req.body

  • 필요한 값만 뽑아내기위해서 반복문을 써준다.
    : for(let i=0; i< count; i++){ // i = 0 1
  • i는 name값의 길이를 사용한다.
    : const count = req.body.name.length;

4-1. 물품번호 부여

const result = await coll.findOneAndUpdate(
	{ _id : 'SEQ_ITEM_NO'}, { $inc : { seq : 1 } }
    );
  • 같은 번호를 부여해서는 안되기때문에 for 반복문 안에 넣어서 SEQ_ITEM_NO시퀀스도 두번 돌아가게 만든다.

  • obj 변수 정의
    : let arr = [];
    : [{obj},{obj}] = 배열안의 JSON 형태로 보낼것이기 때문
    : 중요!

let obj = {
  _id : result.value.seq,
  name : req.body.name[i],
  content : req.body.content[i],
  price : req.body.price[i],
  quantity : req.body.quantity[i],
  regdate : new Date(),

  // file

  filename : req.files[i].originalname,
  filedata : req.files[i].buffer,
  filetype : req.files[i].mimetype,
  filesize : req.files[i].size
}
  • arr.push(obj);
    : 배열형태로 만든다.
여기까지 for

4-2. for문은 두번(count번) 수행되어야한다.

{
name    : [ 'vueper!!!' , 'node!!!' ],
content : [ '내용 slide' , '내용 node' ],
price   : [ '456'       , '123' ],
quantity: [ '654'       , '321' ]
}
  • 이런 형태이기 때문에
    : [i] = 0 1

5. 추가 할 항목 collection + result

const coll1 = dbConn.db(DBNAME).collection(ITEMCOLL);
const result1 = await coll1.insertMany(arr);

  • coll.insertOne({ }); = 한번
  • coll.insertMany( [ {},{},{} ] ); = 여러번 = 배열
console.log(result1);
--- 이렇게 나옴 ---
{
acknowledged: true,
insertedCount: 2,  <<- 이거!!
insertedIds: { '0': 10055, '1': 10056 }
}
  • insertedCountcount와 같으면 200!
if(result1.insertedCount === count){
            return res.send({status:200})
        }
profile
The best

0개의 댓글