ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MongoDB와 mongoose
    Project using node.js/Cloning Youtube 2020. 8. 23. 14:31

    설치

    MongoDB 설치

    next를 누른다.

    agree 그리고 next

    Complete를 누른다.

     

    checkbox 해제 및 next

    Compass 설치 여부는 기호에 따라, 나는 해제했다. 그리고 next

    Install 끝!

      설치 확인 방법은 terminal에 mongo와 mogod를 쳐서 다음과 같이 나오면 잘 설치가 된 것이다. wsl을 사용해서 mongo와 mongod의 명령어를 찾을 수가 없다고 하는데, mongo.exe나 mongod.exe를 치면 된다. 나중에 이 부분은 alias 처리를 해줘서 mongo와 mongod로 바꿔주자.

    mongod
    mongo

    Mongoose 설치

    MongoDB를 이제 Node.js와 연결해야 한다. 그러기 위해서 mongoose를 설치하자.

    #npm install mongoose

      mongoose는 ODM(Object Document Mapping)이다. mongoose의 유용한 기능인 Schema를 통해서 mongoDB의 data를 쉽게 관리할 수 있다.

      db.js 파일을 만들고 mongoDB와 nodejs를 연결했다. mongo를 치면 port 번호가 나온다. 보통 port번호는 27017일 것이다. url 주소 뒤에 자신이 원하는 db의 이름을 적어주자. 그러면 알아서 mongoDB와 nodejs가 연결이 된다. db의 생성 확인 방법은 'show dbs'다. 하지만 아직 wetube-v3가 안 뜰 것이다. 왜냐하면 collection에 아직 data가 추가되지 않았기 때문이다. 여기서 collection이란 SQL에서 table과 같은 것이다.

    db.js

    그리고 nodeJS가 인식할 수 있게 init.js에서 db.js를 호출했다.

    init.js

    dotenv

      github에 소스 코드를 올릴 때 같이 올라가거나 외부에 노출되면 안 되는 것들이 있다. 비밀번호, COOKIE__SECRET이나 특정 ID 값들이다. 이러한 값들을 따로 보관하고 사용할 수 있게 하는 파일이 .env 파일이다. 나는 db url을 .env 파일에 저장하고 process.env로 불러오겠다. 먼저 dotenv를 설치하자.

    #npm install dotenv

    나는 dotenv.config()를 db.js가 아닌 middlewares.js에 선언했다.

    middlewares.js

      그 이유는 app.js가 실행이 되면서 locallMiddleware를 가져오기 위해 middlewares를 호출한다. 그러면 middlewares 안에 있는 dotenv.config()가 실행이 되고 모든 파일들이 .env파일을 사용할 수 있게 된다.

    app.js

    .env 파일에서 MONGO_URL을 정의했다.

    .env

    .env 파일에 있는 변수를 사용하고 싶다면 process.env.변수이름 으로 하면 된다.

    db.js

     

    참고 자료

     

    소스 코드

    https://github.com/zpskek/wetube-v3/commit/41320101ffb33bf83535b9d151a0046da1dd10d3

    'Project using node.js > Cloning Youtube' 카테고리의 다른 글

    Model - Video.js  (0) 2020.08.23
    Model - User.js  (0) 2020.08.23
    MVC pattern  (0) 2020.08.23
    export default VS export  (0) 2020.08.22
    Middlewares for local variables  (0) 2020.08.22

    댓글

Designed by Tistory.