출처 : https://www.youtube.com/watch?v=iFN5zKuvTK4&list=PLG7te9eYUi7vxSvo6hvhOaht8oP0PoCwi&index=16  

mongodb.com 사이트에 가입하고 등록을 한다. 그리고 VSCODE에 몽고 db 확장 프로그램을 설치하여 본인의 계정을 연결하면 된다.

 

 

 

npm i mongoose dotenv 로 몽고디비를 설치한다.

 

폴더와 파일을 다음과 같이 만든다.

 

 

먼저 .env 폴더에는 환경변수를 설정한다. 맨 뒤 "/" 끝 부분에 자신이 원하는 스키마 이름을 적는다. 파란색 부분은 처음 몽고 DB를 가입했을 때 비밀번호이다.

 

 

 

 

 

db 연결하는 js 파일에서는 다음과 같이 몽고디비를 불러와서 비동기처리 이후 db를 연결시킨다.

 

 

 

 

 

 

 

애플리케이션 와서 다음과같이 코드를 적고 서버를 실행하면 디비가 연결된걸 볼 수 있다.

 

 

 

 

스키마와 모델

 

mongoose 에서는 스키마(schema) 와 모델(model) 이라는 개념이 존재한다. 

 

스키마는, 해당 컬렉션의 문서에 어떤 종류의 값이 들어가는지를 정의한다.

모델은 스키마를 통해서 만드는 인스턴스이다.

바디파서 미들웨어

요청 본문에 있는 내용을 프로그래밍에 사용하려면 바디파서 미들웨어를 등록해야 한다.

 

 

 

 

예시

요청한 바디 값을 콘솔에 찍어보려고 한다.

 

 

 

 

바디 값에 Json 형식으로 내용을 적고 보냈으나 요청한 바디값이 undefined가 떴다. 이는 body parser 미들웨어를 등록하지 않았기 때문이다.

 

 

 

 

 

 

애플리케이션 코드에 가서 body parser 미들웨어를 다음과 같이 등록한다. json()은 json 형식의 본문을 파싱하고,

urlencoded()는 URL로 인코딩된 본문을 파싱한다.

다시 post를 실행해보면 콘솔에 내가 요청한 바디값의 내용이 출력된다.

 

 

 

 

 

이를 이용해서 재미있는걸 하나 해봤다. 먼저 바디값을 각각 name, email, phone으로 추출한다.

이들 중 값이 하나라도 없다면 res.send()를 이용해 '필수 값이 입력되지 않았습니다.'로 메세지를 띄울 것이다.

 

 

 

 

 

JSON 형식으로 값을 하나도 보내지 않아봤더니 Response 메세지에 '필수 값이 입력되지 않았습니다.' 라고 뜬다.

 

 

 

라우터 미들웨어

Router 객체를 이용하여 라우트 코드를 보다 읽기 쉽고 관리하기 쉽게 해줌

 

 

 

 

예시

 

라우터 미들웨어를 사용하지 않은 코드. 이 코드를 라우터 미들웨어를 사용한 버전으로 바꾸어 보려고 한다.

 

 

 

대문자 Router()가 라우터 객체, router는 그 객체를 받는 인스턴스

 

 

 

 

라우터 인스턴스로 경로가 같은 것을 다음과같이 설정해 get일 경우, post 일경우 코드를 작성하려고 한다.

밑의 두개의 라우터를 하나의 코드로 정리하는 것

 

 

 

 

완성

 

 

 

 

 

파라미터를 가지는 라우터들 역시 미들웨어로 정리를 했다.

 

 

 

 

최종 완성, 라우터 미들웨어를 사용하지 않았을 때 보다, 더 간단해진 걸 확인할 수 있다.

 

 

 

 

다른 파일에 있는 라우터 미들웨어를 사용

 

routes/contactRoutes.js 안에 라우터 미들웨어가 있을 경우, 그걸 사용하고 싶다면. 그 js 파일에 module.exports로 해당 라우터를 외부에서 사용하겠다는 것을 선언하고.

 

서버를 실행하는 app.js에서 app.use()를 이용해 외부에 있는 미들웨어를 사용할것을 설정한다. 

 

 

 

 

 

contactRoutes 파일 안에 있는 미들웨어의 '/contacts' 경로 부분을 제거한 후 애플리케이션 코드의 app.use() 에 설정한 경로에 '/contacts' 이렇게 설정해도. 같은 결과가 나타난다.

+ Recent posts