1. mongoDB 사이트에서 가입하고 Collection 만들기
- 가입
- 서버위치 : 한국 - DB Access 에서 ID/PS 설정
- atlas admin 으로 설정
- Network Access에서 IP 추가
- DB Collection 설정
- 프로젝트 폴더로 돌아와서 npm i mongoose
2. Model/Schema 생성(backend/models)
User.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({ //스키마 생성자
userID: {
type: String, // 타입 설정
required: true // 필수 설정(true:있어야함, false:optional)
},
name : {
type:String,
required: true
},
userPassword :{
type:String,
required:true
},
active : {
tpye: Boolean,
default: true //디폴트값을 설정할 수 있다.
}
},
{versionKey : false} //_v 버전키를 안보고싶으면 false
);
module.exports = mongoose.model('User', userSchema);
- 또다른 스키마도 만들어보자.
Post.js(example)
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const postSchema = new Schema({
user: {
type: mongoose.Schema.Types.ObjectId, //object id from a schema
required: true,
ref: 'User' // 만든 User 스키마를 레퍼런싱한다
},
title : {
type:String,
required: true
},
text :{
type:String,
required:true
},
completed :{
type:Boolean,
required:false
}
},
{timestamps: true}, // 타임스탬프를 추가할 수 있다.
);
module.exports = mongoose.model('Note', postSchema);
- 비즈니스로직/요구사항에 맞게 적절히 설정한다.
3. mongoose-sequence (자동으로 증가하는 필드 생성 라이브러리)
- npm i mongoose-sequence
post.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const AutoIncrement = require('mongoose-sequence')(mongoose); //설치
// ...
postSchema.plugin(AutoIncrement, { //설정
inc_field:'ticket',
id:'ticketNums',
start_seq:500
})
3. db연결하기
db.js
const mongoose = require("mongoose");
mongoose.set('strictQuery', false);
const mongooseConnect = async ()=>{
try{
await mongoose.connect(process.env.DB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
// useFindAndModify: false,
// useCreateIndex: true,
}, ()=>{
console.log('연결되었습니다 db.js');
})
}
catch(err){
console.log(err)
}
}
module.exports = mongooseConnect;
server.js
const app = require('./app');
const http = require('http');
const mongooseConnect = require('./db');
const mongoose = require('mongoose');
const { logEvents, logger } = require('./middleware/logger')
const server = http.createServer(app);
mongooseConnect(); //db 연결 호출
mongoose.connection.once('open', ()=>{ //mongoose eventListener
server.listen(process.env.PORT, ()=>{
console.log('server.js에서'+process.env.PORT)
})
})
mongoose.connection.on('error', err => { //mongoose Error log
console.log(err);
logEvents(`${err.no}: ${err.code}\t${err.syscall}\t${err.hostname}`, 'mongoErrLog.log');
})
- AppSam의 DB커넥션을 이벤트리스너 기반으로 대체한 결과물 예시.
4. 서버실행 및 테스트
- 이제 서버를 실행시켜보면
'더이상 하지 않는 Backend - NodeJS > Node-Express 개론(완)' 카테고리의 다른 글
[O'REILLY] Node & Express - 1장 : EXPRESS에 대하여 (0) | 2023.03.06 |
---|---|
Express - 5장 : Authentication - 1 (Session-based Auth) (0) | 2023.03.03 |
Express - 4장 : Mongoose 의 CRUD (0) | 2023.03.03 |
Express - 3장 : Mongoose 더 살펴보기 (0) | 2023.02.27 |
Express - 1장 : 설치부터 요청처리와 REST API 개념정리 (0) | 2023.02.26 |
댓글