일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- GIT
- Express
- 이진탐색트리
- 뷰
- NavBar
- mongoose
- 웹해킹기초
- 워게임추천
- node.js
- 그래프
- materialize
- wargame.kr
- 웹개발
- 포렌식워게임
- MongoDB
- nodeJS
- 자바문제풀이
- gitbash
- 써니나타스
- 워게임
- 포렌식
- 자료구조
- 자바
- 이진트리
- 자바기초
- CTF
- node
- bootstrap
- 웹기초
- 웹해킹
- Today
- Total
보안 전공생의 공부
게시판 만들기 / back end + mongoose 정리 본문
1. 게시물 model 만들기
//models/Post.js
const mongoose = require('mongoose');
const postSchema = mongoose.Schema({
title:{type:String, required:true},
body:{type:String, required:true},
createdAt:{type:Date, default:Date.now},
updatedAt:{type:Date},
});
const Post = mongoose.model('post', postSchema);
module.exports = Post;
- Post의 schema 구성 -> title, body, createdAt, updatedAt
createdAt:{type:Date, default:Date.now}
default 항목에 함수명을 넣으면 해당 함수의 return이 기본값이 된다
· Date.now : 현재 시간 return
//routes/posts.js
const express = require('express');
const router = express.Router();
const Post = require('../models/Post');
// Index
router.get('/', function(req, res){
Post.find({})
.sort('-createdAt')
.exec(function(err, posts){
if(err) return res.json(err);
res.render('posts/index', {posts:posts});
});
});
// New
router.get('/new', function(req, res){
res.render('posts/new');
});
// create
router.post('/', function(req, res){
Post.create(req.body, function(err, post){
if(err) return res.json(err);
res.redirect('/posts');
});
});
// show
router.get('/:id', function(req, res){
Post.findOne({_id:req.params.id}, function(err, post){
if(err) return res.json(err);
res.render('posts/show', {post:post});
});
});
// edit
router.get('/:id/edit', function(req, res){
Post.findOne({_id:req.params.id}, function(err, post){
if(err) return res.json(err);
res.render('posts/edit', {post:post});
});
});
// update
router.put('/:id', function(req, res){
req.body.updatedAt = Date.now();
Post.findOneAndUpdate({_id:req.params.id}, req.body, function(err, post){
if(err) return res.json(err);
res.redirect("/posts/"+req.params.id);
});
});
// destroy
router.delete('/:id', function(req, res){
Post.deleteOne({_id:req.params.id}, function(err){
if(err) return res.json(err);
res.redirect('/posts');
});
});
module.exports = router;
// Index
router.get('/', function(req, res){
Post.find({})
.sort('-createdAt')
.exec(function(err, posts){
if(err) return res.json(err);
res.render('posts/index', {posts:posts});
});
});
· .sort() : string인 object를 받아서 정렬하는 함수
정렬할 항목명을 문자열로 넣으면 -> 오름차순 정렬(ㄱㄴㄷㄹ)
문자열 앞에 -을 붙여 넣으면 ->내림차순 정렬(ㄹㄷㄴㄱ)
2가지 이상으로 정렬하는 경우
· .exec() : DB에서 찾은 data를 대상으로 명령
여기서는 posts/index에 post model을 활용할 데이터로 보낸다.
// update
req.body.updatedAt = Date.now()
post를 수정하는 경우-수정된 날짜를 updatedAt에 기록
//index.js
//Routes
app.use('/', require('./routes/home'));
app.use('/posts', require('./routes/posts'))
index.js에 posts route를 추가한다.
[mongoose를 사용하다보니 이해가 가기 시작해서 정리하기]
· NoSQL : 단순 검색, 추가 작업에 최적화된 키 값 저장공간
SQL계열의 쿼리 언어를 사용할 수 있음(->Not Only SQL이라 불리기도 함)
대규모의 데이터를 유연하게 (RDBMS와 달리 데이터 구조가 정해져있지 않음)처리할 수 있으며,
설계가 단순하고 수평 확장(관계형 데이터베이스의 문제점)에 용이함
-> 대표 : mongoDB
· ORM(Object Relational Mapping) : 오브젝트와 관계형 데이터를 자동으로 매핑해주는 것
- 객체 지향 프로그램 - 클래스 사용 / 관계형 데이터베이스 - 테이블 사용
- 객체 모델과 관계형 모델 간의 불일치는 SQL을 자동 생성하여 해결해줌
- 객체를 통해 간접적으로 데이터베이스 데이터를 다룸
· mongoose모듈 : mongoDB(NoSQL database)를 지원하는 노드의 확장모듈
- schema를 만들고 -> model을 만듬 => data를 불러옴
-> data를 객체화시켜 빠르게 수정함으로써 데이터에 접근할 수 있다
<사용법>
(1) mongoose 설치 : npm install mongoose --save
(2) mongoDB 연결 :
const mongoose=require('mongoose')로 mongoose객체에 mongoose모듈 로드할 수 있다.
mongoDB와 node.js 연결 관련해서는 따로 포스팅한 것이 있당-> https://jonnastudy.tistory.com/91
// DB setting
mongoose.connect(process.env.MONGO_DB);
const db = mongoose.connection;
데이터베이스가 연결되면 connection 인스턴스가 생성된다.위의 방법은 1개의 데이터베이스에 연결할 떄만 유효된다.다른 데이터 베이스도 함꼐 사용하고자 mongoose.connect()를 재호출하면
mongoose.connection 인스턴스는 새로운 데이터베이스에 연결된 것으로 변경된다.
※ 여러 데이터베이스를 사용하고 하면 mongoose.connect() 대신 mongoose.createConnection()메소드를 사용하면 됨
const connection1 = mongoose.createConnection(...);
const connection2 = mongoose.createConnection(...);
(3) 모델 정의하기
mongoose의 모델 : mongoDB에서의 데이터를 저장하는 기본 단위인 도큐먼트의 형태
- mongoose에서 제공하는 Schema 인터페이스를 통해 생성 가능
const postSchema = mongoose.Schema({
title:{type:String, required:true},
body:{type:String, required:true},
createdAt:{type:Date, default:Date.now},
updatedAt:{type:Date},
});
위처럼 정의한 schema를 model에 정의하려면
mongoose.model('post', postSchema)를 이용해야하며, 이를 통해 model에 접근 가능하다.
const Post = mongoose.model('post', postSchema);
앞서 생성한 postSchema를 이용해 post라는 model을 생선하는 코드이다.
(4) 모델 사용하기
const Contact= require('../models/Contact')
생성한 model의 인스턴스를 다시 한 번 생성하여 model을 사용할 수 있다.
생성한 인스턴스를 이용해 우리가 원하는 실제 데이터베이스 작업(삭제, 생성, 검색 등)을 수행할 수 있다.
참조 : https://gmlwjd9405.github.io/2019/02/01/orm.html
https://m.blog.naver.com/passionisall/222133887293
https://ko.m.wikipedia.org/wiki/NoSQL
'WEB > Node' 카테고리의 다른 글
게시판 만들기 / 회원가입 (0) | 2021.11.16 |
---|---|
게시판 만들기 / front end + scope + breadcrumb +bootstrap grid (0) | 2021.10.19 |
주소록 만들기 / bootstrap, static 파일 서비스+경로 규칙 (2) | 2021.10.17 |
주소록 만들기 / module (0) | 2021.10.14 |
주소록 만들기 / show, edit, update, destroy (0) | 2021.10.07 |