Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 잔
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- HTML #CSS
- 컴퓨터공학 #c #c언어 #문자열입력
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
Archives
- Today
- Total
영벨롭 개발 일지
[MongoDB]Node.js Mongoose를 이용하여 스키마와 모델 구성 본문
[ Mongoose의 Schema와 Model ]
스키마(schema)는 해당 컬렉션의 문서에 어떤 종류의 값이 들어갈지를 정의하는 구조라고 할 수 있습니다. 데이터베이스의 테이블, 컬렉션 타입 및 속성을 정의하는 문서의 형태 또는 구조입니다.
모델(model)은 스키마를 통해서 만드는 인스턴스로, 작성된 스키마를 인스턴스화하여 실제 데이터베이스에서 적용이 가능하도록 바뀐 형태입니다.
컬렉션(collection)은 관계형 데이터베이스(RDBMS)의 테이블과 동일하며, 여러 JSON 문서를 보유할 수 있습니다.
[ Schema 정의하기 ]
// mongoose import
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
// schema 생성
const testSchema = new Schema(...);
// schema를 'Test'라는 이름의 model로 외부에서 사용할 수 있도록 함
module.exports = mongoose.model('Test', testSchema);
★ Schema 속성
속성 | 타입 | 설명 |
required | boolean | 필수 입력 |
unique | boolean | 다른 행과 중복되면 안됨 |
trim | boolean | 공백 제거(문자열 타입에 사용) |
default | 값 | 문서가 생성될 때 기본값 |
lowercase | boolean | 대문자를 소문자로 저장 |
match | 정규표현식 | 저장하려는 값과 비교 |
validate | [ function(){...}, '함수 실패했을 시 문자열'] | 함수로 개발자가 조건을 만듬 |
set | fucntion(){} | 값을 입력할 때 함수로 조건을 만듬 |
get | function(){} | 값을 출력할 때 함수로 조건을 만듬 |
ref | '모델이름' | 해당하는 모델을 참조할 때 사용 |
minlength / maxlength | number | 문자열 타입의 최소 / 최대 길이 |
★ Schema 타입
스키마의 type 속성과 함께 사용합니다.
타입 | 설명 |
Number | 숫자 타입 |
Boolean | 불리언 타입 |
String | 문자열 타입 |
Buffer | 바이너리 타입 |
Date | 날짜 |
Array | 배열, [] 를 사용해서 표시 ex) [String] 문자열 타입의 배열 |
Schema.Types.ObjectId | 명시적으로 id 타입을 사용할 때 |
Schema.Types.Mixed | 다양한 타입 저장가능, 객체 배열 JSON으로 사용 |
server/model/ 위치에 User.js 파일을 생성하여 유저 정보를 담을 스키마를 정의하였습니다.
// server/model/User.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
id: Schema.Types.ObjectId,
name: {
type: String,
required: true
},
email: {
type: String,
trim: true,
required: true,
match: /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i
},
password: {
type: String,
validate: [
function(password){
return password && password.length > 6;
},
"비밀번호 길이가 6보다 커야합니다."
]
}
})
module.exports = mongoose.model('User', userSchema);
[ Model 사용하기 ]
server/server.js 파일로 이동하여 위에서 정의한 스키마를 모델로 사용해봅시다.
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser')
const PORT = 4000;
const DBURL = '###'
// Model
const User = require('./model/User');
const mongoose = require('mongoose');
// mongoose의 connection 메소드를 변수 db에 할당
let db = mongoose.connection;
// db 연결 실패 시
db.on('error', console.error);
// db 연결 성공 시
db.once('open', () => {
console.log('MongoDB is connected');
})
// mongodb cluster와 연결
mongoose.connect(DBURL, {
useUnifiedTopology: true,
useNewUrlParser: true
})
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
app.get('/', (req, res) => {
res.send({ success: true })
})
// User 등록
app.post('/register', (req, res) => {
// 인스턴스 생성
const user = new User();
const { name, email, password } = req.body;
user.name = name;
user.email = email;
user.password = password;
user.save((err) => {
if(err){
return res.status(400).send(err);
} else {
return res.status(201).send({
success: true
})
}
})
})
app.listen(PORT, () => {
console.log(`Server is running on ${PORT}`)
})
post에 성공하면 콘솔창에 '성공'을 띄오도록 했는데 잘 나오네요!
mongodb cluster도 확인해봅시다~!
반응형