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 | 29 | 30 |
Tags
- 도커
- IaaS
- MongoDB
- 명령어
- 실습
- Docker Swarm
- PaaS
- network
- 개념
- gns3
- 이론
- RAPA
- 쿠버네티스
- docker
- 용어정리
- express
- RAID
- 클라우드
- mysql
- nodejs
- Docker-compose
- PAT
- kubernetes
- dockerfile
- git
- worker
- node.js
- Javascript
- 네트워크
- OpenStack
Archives
- Today
- Total
융융이'Blog
Nodejs, express, MongDB를 이용한 CRUD(4)_Controller_board.js 본문
module.exports = {
// 게시글 작성하기
create: async (req, res) =>{
const { title, content, user } = req.body;
console.log(content);
console.log(title);
const find_user = await User.findById(user._id);
const board = await Board.create({
title,
content: req.body.content,
user: find_user
});
const result = await board.save();
console.log(result.user_id);
return res.json(result);
},
// 특정 게시글 불러오기
read: async (req, res) =>{
const result = await Board.findById(req.params.board_id)
.populate('user','name')
.populate({path: 'comments',
select: 'content re_comments',
populate: {
path: 'user re_comments',
select: 'email name content user',
populate: {
path: 'user',
select: 'email name'
}
}
});
return res.json(result);
},
// 모든 게시글 불러오기
all: async (req, res) =>{
const page_num = req.params.page_num;
const count_board = await Board.countDocuments();
const max_page = Math.ceil(count_board/3);
console.log(max_page);
let result = await Board.find()
.populate('user','name email')
.skip(page_num * 3 - 3)
.limit(3)
result.push({"max_page": max_page});
return res.json(result);
}
}
populate
외래키를 통하여 참조된 값까지 불러오는 값까지 불러온다.
board의 user_id값은 외래키로 저장이 되어 있기에 게시글의 작성자 이름을 알 수 없다.
하지만 .populate('user', 'name')
을 사용한다면 user의 이름까지 불러올 수 있다.(json형태)
그리고 populate 된 내용을 populate를 또 하고 싶다면 json형태로 하위 참조값들을 불러오면 된다. populate({path: 'comments', populate:{path: 'user', select:'name'}})
이런식으로 작성하면 된다.
Pagination
우리가 흔히 게시물을 볼 때 한번에 다 보지 않고 게시물 10개씩 또는 20개씩 페이지네이션을 통하여 게시글을 본다.
이를 위해서 일단 pagination의 마지막 페이지의 값을 알아야한다. mongoDB에서는 countDoucments()
함수를 통하여 Documents의 총 갯수를 가져 올 수 있다. 이를 통해서 마지막페이지를 설정을 해주고 내가 한번에 보고 싶은 게시글 수정를 정해주고 페이지네이션을 값을 만들면 된다.(client에서 처리)
let result = await Board.find()
.populate('user','name email')
.skip(page_num * 3 - 3)
.limit(3)
위에 있는 코드는 Board의 document을 page_num 만큼 skip을 하고 값을 불러오고 그 갯수를 3개를 나타낸다.
'2022이전 > node.js' 카테고리의 다른 글
Nodejs, express, MongDB를 이용한 CRUD(6)_Controller_like.js (0) | 2020.01.12 |
---|---|
Nodejs, express, MongDB를 이용한 CRUD(5)_Controller_comment.js (0) | 2020.01.12 |
Nodejs, express, MongDB를 이용한 CRUD(3)_Controller_user.js (0) | 2020.01.12 |
Nodejs, express, MongDB를 이용한 CRUD(2)_모델링 (0) | 2020.01.12 |
Nodejs, express, MongDB를 이용한 CRUD(1)_router.js (0) | 2020.01.12 |