router 모듈화
hero 목록을 가져오는 api를 만드는데 database 연동 없이 만들자.
먼저 3가지 role을 정의한다.
- /api/user – 모든 사용자가 접근가능한 role
- /api/member – 로그인한 사용자
- /api/admin – 관리자만 접근가능한 api 목록
router 폴더를 만들고 index.ts 화일과 user.ts 화일을 각각 만든다.
/heroes 경로로 들어오면 ‘heroes list’ 라는 스트링을 임시로 리턴한다.
1 2 3 4 5 6 7 8 9 |
import {Router} from "express"; const routes = Router(); routes.get('/heroes', (req, res) => { res.send('heroes list'); }); export default routes; |
/user 경로로 들어오면 위에서 정의한 user.ts 로 라우팅한다.
1 2 3 4 5 6 7 8 |
import {Router} from 'express'; import user from "./user"; const routes = Router(); routes.use('/user', user); export default routes; |
이제 router 의 index.ts 에서 해당 라우팅을 포함한다.
index.ts -> router/index.ts -> router/user.ts 로 라우팅 경로가 잡혔으므로
/api/user/heroes 가 최종 경로가 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import express from 'express'; import router from "./router"; const app = express(); app.get('/api/hello', (req, res) => { res.send('hello world'); }); app.use('/api', router); app.listen(8000, () => { console.log('server is listening 8000'); }); |
브라우저를 열어서 테스트해보자. /api/user/heroes
controller 모듈화
controller 폴더를 만들고 UserController.ts 를 추가한다.
1 2 3 4 5 |
export class UserController { static getHeroes = (req, res) => { res.send('heroes list'); } } |
user.ts에서 해당 컨트롤러를 import 한다.
1 |
routes.get('/heroes', UserController.getHeroes); |
요약
router 모듈화는 유알엘 경로에 대해서 어떤 모듈을 로딩할건지 라우팅 경로를 설정하는 것이고, 특정 유알엘 경로에서 구체적인 프로토콜을 지정하는것이 controller 모듈화이다.
예를 들어, index.ts > router/index.ts > router/user.ts 에서 /api/user 라는 경로를 지정했고, 해당 경로 내에서 /heroes는 목록 가져오기 api를 만들게 되고 최종 경로는 router 모듈과 controller 모듈이 결합된 /api/user/heroes 가 되는것이다.