꼬물꼬물 개발자
ODM 환경 설정 및 DB모델 생성 본문
1. 프로젝트 생성
> express mymongoapp --view=ejs
> npm i
> npm start (package.json / start : nodemon 변경)
2. Mongoose 설치
> npm i mongoose@6.10.0
> npm i mongoose-sequence@5.3.1
3. Database 생성
MongoDB Compass 에서 Databases 생성
4. Mongoose DB 연결하기
- mongosh.exe 파일 더블클릭하여 실행파일 활성화
- MongoDB Compass 에서 DB연결 주소 복사
- 주소 붙여넣기 -> test DB로 이동(default 계정으로 들어감)
- 관리자 계정 / 암호 생성
> show dbs
> use admin
> db.createUser({ user:'아이디', pwd:'비밀번호', roles:['root'] })
5. Mongoose DB 환경설정
- app.js 환경구성
//몽고DB서버에 연결합니다.
const connect = require('./schemas/');
connect();
- indes.js 환경구성
schemas 폴더 생성 / indes.js 파일 생성
const mongoose = require('mongoose');
const connect = () => {
if (process.env.NODE_ENV !== 'production') {
// 현재 소스 실행환경이 개발환경인 경우 디버깅 가능하게 설정한다.
mongoose.set('debug', true);
}
//몽고DB연결정보를 설정합니다.
mongoose.connect('mongodb://아이디:비밀번호@127.0.0.1:27017/admin', { // DB계정
dbName: 'modu_chat', // DB명
}, (error) => {
if (error) {
console.log('몽고디비 연결 에러', error);
} else {
console.log('몽고디비 연결 성공');
}
});
};
mongoose.connection.on('error', (error) => {
console.error('몽고디비 연결 에러', error);
});
mongoose.connection.on('disconnected', () => {
console.error('몽고디비 연결이 끊겼습니다. 연결을 재시도합니다.');
connect();
});
//회원정보 콜렉션 모델을 참조합니다.
//require('./member.js');
//게시글 ODM모델 추가
require('./article.js');
module.exports = connect;
- npm start 실행 순서
app.js 실행 -> schemas/ index.js 호출 -> mongoose 패키지 참조 -> mongoose.connect 매서드 호출
7. Mongoose 모델 생성
- schemas/ article.js
// mongoose 패키지를 참조한다.
const mongoose = require('mongoose');
// 숫자 자동채번 기능제공을 윟한 mongoose-sequence 패키지 설치하고 참조하기
// 설치 : npm i mongoose-sequence@5.3.1
// mongoose-sequence
const AutoIncrement = require("mongoose-sequence")(mongoose);
const { Schema } = mongoose;
// Schema클래스를 생성할때 생성자함수에 새로만들 콜렉션의 스키마(데이터구조)를 정의합니다.
const articleSchema = new Schema({
title: {
type: String,
required: true,
},
article_type_code: {
type: Number,
required: true,
},
contents: {
type: String,
required: false,
},
view_count: {
type: Number,
required: true,
},
is_display_code: {
type: Number,
required: true,
},
ip_address: {
type: String,
required: false,
},
edit_date: {
type: Date,
default: Date.now,
},
edit_member_id: {
type: Number,
required: false,
},
});
//자동채번 컬럼생성 및 콜렉션에 추가
articleSchema.plugin(AutoIncrement, { inc_field: "article_id" }); //article_id는 1,2,3,4..
// mongoose.model('콜랙션', )호출해서 물리적인 콜랙션(테이블)을 생성해줍니다.
module.exports = mongoose.model('Article', articleSchema);
index.js
//게시글 ODM모델 추가
require('./article.js');
- schemas/ member.js 생성
const mongoose = require('mongoose');
const { Schema } = mongoose;
const memberSchema = new Schema({
memberid: {
type: String,
required: true,
unique: true,
},
memberpwd: {
type: String,
required: true,
},
membername: {
type: String,
required: true,
},
email: {
type: String,
required: true,
},
age: {
type: Number,
required: false,
},
married: {
type: Boolean,
required: false,
},
createdAt: {
type: Date,
default: Date.now,
},
});
module.exports = mongoose.model('Member', memberSchema);
index.js
//회원정보 콜렉션 모델을 참조합니다.
require('./member.js');
index.js 작성 완료
8. 라우터 파일에서 모델 사용하기