더북(TheBook)

굉장히 편하죠? 이것을 한 번 더 리팩토링하면 다음과 같이 정리해 줄 수 있습니다.

src/api/posts/index.js

import Router from 'koa-router';
import * as postsCtrl from './posts.ctrl';

const posts = new Router();

posts.get('/', postsCtrl.list);
posts.post('/', postsCtrl.write);

const post = new Router(); // /api/posts/:id
post.get('/', postsCtrl.read);
post.delete('/', postsCtrl.remove);
post.patch('/', postsCtrl.update);

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

export default posts;

 

/api/posts/:id 경로를 위한 라우터를 새로 만들고, posts에 해당 라우터를 등록해 주었습니다. 이렇게 하면 중복되는 코드가 별로 없어서 깔끔하지만, 라우트 경로들이 한눈에 들어오지 않으므로 취향에 따라서는 불편하게 느낄 수도 있습니다. 이러한 방식이 불편하다면 굳이 이렇게까지 리팩토링하지 않아도 상관없습니다.

코드를 작성했으면 GET /api/posts/:id 요청을 할 때 aaaaa와 같이 일반 ObjectId의 문자열 길이가 다른, 잘못된 id를 넣어 보세요. 500 대신에 400 Bad Request라는 에러가 발생하나요?

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