본문 바로가기

공부/Node.js

[Node.js] MongoDB를 사용한 사용자 추가

원래 하던 내용이 있어서 간단하게 기록하려고 한다.

일단 기본적인 구성 부터 살펴 보자면

일단 HTML이다. 그냥 간단하게 DB를 사용할 목적으로 코드를 짠거라서 그렇게 특별할 건 없고 아이디와 비밀번호 그리고 별명을 받는다.(저기는 아이디라 써져있지만 일단 name을 다르게 해주었으니 그냥 넘어갔다.)

 

다음은 실질적인 동작역할을 해줄 코드이다. 이 코드는 '/process/adduser' 라는 path를 통해서 위의 HTML코드와 연결 되어있다. HTML에서 전송을 눌러서 request를 하게 되면 받은 Id, Passowrd, Name을 각각의 변수에 따로 저장을 하고 database가 연결되어있을 경우 addUser를 실행한다.

 

addUser의 파라미터로 들어갈 callback fucntion자리의 내용은 에러처리, 성공 및 실패 표시 그리고 데이터베이스 연결 실패로 아주 간단하게 이루어져있다.

 

addUser 코드이다. 위에서 실행한 코드는 callback function을 실행하는 주체로 파라미터는 위의 코드와 동일하게 데이터베이스, Id, 패스워드, 이름을 받으며 database.collection을 통해서 users라는 컬렉션과 연결(NoSQL의 테이블 개념)하고 insertMany라는 함수를 통해서 3개의 파라미터를 가지는 document를 보내준다.

 

밑의 조건문은 레코드 추가여부를 나타낸다.

 

추가로 밑은 DB연결하는 코드이다.

URL을 먼저 설정해주고 MongoClient의 connect를 통해서 연결 이때 db가 위에서 사용하는 database변수로 사용되는 것이다.

 

이게 웹페이지에서의 동작 과정이고

 

cmd에서 실행시킨 몽고 DB 내부 데이터이다. 보면 asdf라는 아이디와 practice라는 이름을 가진 데이터가 들어간 것을 볼 수 있다.(2개가 있는 이유는 하나는 미리 시험으로 해보았다.)

 

그렇게 별거 아닌 코드인데 정말 멀리멀리 돌아서 왔다. 중간 부터 Router.route 함수가 먹히질 않아서 왜 그런거지 하면서 거의 30분을 의미없이 보냈다... 그렇게 찾고 찾고 또 찾아낸 방법이 2개가 있었는데 하나는 Router.route를 쓰지말고 app.post를 써서 해결하는 것이었고 다른 하나는 근본적인 해결법인데 코드의 순서를 바꾸다가 되어버렸다.

 

위의 코드를 보면 router 밑에 바로 router를 사용하고 중간에 id 값을 가져오지 못해서 body-parser만 위로 올렸더니 바로 해결되었다. 그리고 주소를 못알아 먹을 땐

주소를 못 알아 먹을 땐 제일 밑에 router를 붙여주니 바로 해결되었다. 아무래도 순서 때문에 코드가 꼬이면서 발생한 문제인 것 같다.

 

너무나도 쉽게쉽게 프로그래밍을 하다보니 나도모르게 순서의 개념을 깔끔히 잊어버리고 코딩을 한 것 같다. 다음에 문제가 생기면 아마 가장 먼저 중요시 여겨야하는 부분 일 것 같다. body-parser도 마찬가지로 중요시 해야한다.

 

결론 : 다음에 값을 못가져온다면 body-parser 순서,  주소 접근을 못한다면 코드의 순서를 확인해봐야할 것 같다.