// /add 라는 주소에서 post 전송요청이 오면
app.post('/add', (요청내용, 응답방법) => {
// 다음 페이지에 이 문구를 보여주세요. 이거 안쓰면 화면이 안넘어감. 근데 db 삽입은 잘 됨.
응답방법.send('데이터 전송 완료')
//첫 번째 쿼리문 실행 : db에 counter 라는 이름의 table을 찾고. name이 게시물갯수 라는 항목을 찾으셈.
db.collection('counter').findOne({name:'게시물갯수'}, (에러, 결과) => {
if(에러){return console.log(에러);}
// name이 '게시물갯수'인 항목 중에 totalPost 라는 값을 변수에 담음.
var 총게시물갯수 = 결과.totalPost; // 현재 값 0
// 두 번째 쿼리문 실행 : post 라는 table에 데이터 () 안의 값들을 insert하셈
// 고유id의 값에는 총게시물갯수에 + 1을 한 값을 삽입.
db.collection('post').insertOne({_id : 총게시물갯수 + 1, 제목:요청내용.body.title, 날짜:요청내용.body.date}, (에러, 결과) => {
if(에러){return console.log(에러);}
//세 번째 쿼리문 실행 : counter테이블에 게시물갯수 항목의 값 중 totalPost라는 값을 기존 값에 +1을 더해주셈.
//$inc : {totalPost:1} == totalPost의 현재 값에 +1을 해주셈. 기존mysql의 autoinc 기능
//$set : {totalPost:100} == totalPost의 값을 100 으로 바꿔주셈.
db.collection('counter').updateOne({name : '게시물갯수'}, {$inc: {totalPost:1}}, (에러, 결과)=>{
if(에러){return console.log(에러);}
})
});
});
})
정리
- db.collection 으로 시작하는 코드는 DB에게 명령을 하는 쿼리문이다.
- 위 코드는 DB에 총 세 개의 쿼리문(명령)을 주었다.
- 자세히 보면 쿼리문들의 패턴이 갖으니 참고하자.
- 쿼리문 하나 당 에러 발생시의 에러출력 코드를 꼭 써주자.