- 포스트 목록을 볼때 한 페이지에 보이는 포스트의 개수는 적당히 보여줘야 한다.
- 전체 포스트를 가져온다면 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을 할때 사용
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에서도 처리가 가능할까?