Mongoose 사용하기
MongoDB의 ODM인 mongoose를 express.js와 함께 사용해보았다.
폴더구조
1 | back |
model을 정의하기 위한 models폴더를 만들었다.
또한 루트 디렉터리에 MongoDB와 연결하기 위한 mongo.js파일을 만들었다.
설치
mongoose
를 사용하기 위해 mongoose
를 설치하였다.
또한 .env
파일을 작성하기 위해 dotenv
를 설치해주었다.
1 | npm i mongoose |
dotenv
내 데이터베이스의 주소인 MONGO_URI
,
개발인지 배포인지 나타낼 NODE_ENV
그리고 express에서 사용할 포트넘버인 PORT
를 작성해주었다.
.env
1 | MONGO_URI=mongodb+srv://<username>:<password>@<clustername>.zdhw0.mongodb.net/<databasename>?retryWrites=true&w=majority |
Mongoose를 express와 연결하기
MongoDB와 연결하는 함수를 모듈화 하였다.
./mongo.js
1 | const mongoose = require("mongoose"); //모듈을 불러옴 |
그 후 app.js에서 호출하여 데이터베이스와 연결 해주었다.
./app.js
1 | ... |
Model과 Schema
Mongoose는 nosql인 MongoDB에 스키마를 도입하여 데이터를 DB에 넣기 전에 검사한다. 때문에 제약은 있지만 안정성을 더하였다.
다음과 같이 UserSchema를 작성하였다.
./models/user.js
1 | const mongoose = require("mongoose"); |
사용자 정의 메소드 정의하기
Mongoose에선 Schema
혹은 모델의 인스턴스인 Document
객체 내부에 다양한 메서드를 정의하고 사용할 수 있다.
methods
mongoose는 스키마나 다큐먼트에 사용자 정의 메소드를 추가할 수 있다.
Schema
객체의 methods
에 접근하여 함수를 추가해주었다.
내부의 this
를 통해 Document에 접근할 수 있다.
때문에 화살표 함수를 사용하면 안 된다.
./models/user.js
1 | UserSchema.methods.methodName = function () { |
호출시엔 새로운 Document를 만들어서 호출할 수 있다.
./models/user.js
1 | const user=new User({...}); |
statics
mongoose는 모델이나 쿼리에도 사용자 정의 메소드를 추가할 수 있다.
Schema
객체의 statics
에 접근하여 함수를 추가해주었다.
내부의 this
를 통해 Schema Collection에 접근할 수 있다.
마찬가지로 화살표 함수를 사용하면 안 된다.
나는 유효성 검사 메소드를 statics메서드로 정의해주었다.
이럴 경우 코드가 훨씬 깔끔해지는 것 같다.
1 | UserSchema.statics.staticMethodName = function () { |
호출시엔 새로운 Document를 만들지 않고 User Colloection에 접근할 수 있다.
1 | const user=new User({...}); |
느낀점
자질구레한 오타로 에를 좀 먹어서 다음엔 typescript도 같이 적용해보아야겠다.