더북(TheBook)

미들웨어 이름과 코드를 수정한 뒤 posts 라우터에도 반영해 주세요.

src/api/posts/index.js

(...)
posts.use('/:id', postsCtrl.getPostById, post.routes());

export default posts;

 

그다음에는 read 함수 내부에서 id로 포스트를 찾는 코드를 간소화해 줍니다.

src/api/posts/posts.ctrl.js - read

export const read = ctx => {
  ctx.body = ctx.state.post;
};

 

코드가 정말 짧아졌지요?

getPostById를 구현하고 적용했다면 이번에는 checkOwnPost라는 미들웨어를 만듭니다. 이 미들웨어는 id로 찾은 포스트가 로그인 중인 사용자가 작성한 포스트인지 확인해 줍니다. 만약 사용자의 포스트가 아니라면 403 에러를 발생시킵니다.

src/api/posts/posts.ctrl.js - checkOwnPost

export const checkOwnPost = (ctx, next) => {
  const { user, post } = ctx.state;
  if (post.user._id.toString() != = user._id) {
    ctx.status = 403;
    return;
  }
  return next();
};

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.