- 포스트 목록을 볼때 한 페이지에 보이는 포스트의 개수는 적당히 보여줘야 한다.
- 전체 포스트를 가져온다면 network I/O가 상당할것이다
- 포스트 내용도 동일하게 전부가 아닌 일부만 보여주는게 I/O를 줄이는데 도움이 될것!
export const list = async ctx => {
const page = parseInt(ctx.query.page | '1', 10);
if (page < 1) {
ctx.status = 400;
return;
}
try {
const posts = await Post.find()
.sort({ _id: -1 })
.limit(10)
.skip((page - 1) * 10)
.exec();
const postCount = await Post.countDocuments().exec();
ctx.set('Last-Page', Math.ceil(postCount / 10));
ctx.body = posts
- 위에
sort
는 최근에 작성한 글을 먼저 오도록 limit
은 10개의 post만 가져오도록skip
은 pagination을 할때 사용skip(10)
은 10개 뒤로 이동
Last-Page
의 값은 Header에 함께 포함
body에 대한 처리
ctx.body = posts
.map(post => post.toJSON())
.map(post => ({
...post,
body:
post.body.length < 200 ? post.body : `${post.body.slice(0, 200)}...`,
}));
- 결과로 가져온
body
에서 ㅅ길이를 조절하기 위해서는 다음과 같이 body를 가져와 줄이면 된다. - 위 결과는 서버쪽에서 처리하는 내용, db에서도 처리가 가능할까?
'Web 개발 > Node' 카테고리의 다른 글
[Node] JWT를 이용한 로그인, 로그아웃, 상태체크 RESTApi 토큰기반인증 구현 access_token (+소스코드) (1) | 2020.02.16 |
---|---|
[Node] 세션 기반 인증 vs 토큰 기반 인증 (로그인 상태를 어디서) (0) | 2020.02.16 |
[Node] MongoDB ObjectId 검증, Request Body 검증 (joi, mongoose) (0) | 2020.02.16 |
[Node] MongoDB REST API 작성하는 방법 (HTTP GET, POST, PATCH, DELETE) (0) | 2020.02.16 |
[Node] MongoDB 스키마(schema)와 모델(model) 정의 (+예제코드) (0) | 2020.02.16 |