sitelink1 https://tacademy.skplanet.com/live/playe...mp;seq=134 
sitelink2 https://youtu.be/-ARhHXVkdrQ 
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

1. API 관리용 폴더를 만들고 소스코드를 위치시킨다

root/api/user/index.js 작성

let users = [

    {id:1, name:'Alice'},

    {id:2, name:'Bek'},

    {id:3, name:'Chris'}

]

 

app.get('/', (req, res) => res.send('Hello World!'))

app.get('/users', (req, res) => {

})

app.get('/users/:id', (req, res) => {

})

app.delete('/users/:id', (req, res) => {

})

app.post('/users', (req, res) => {

})

 

2. Router 클래스를 이용한다

1) 기능 : get,delete,post 함수를 Router클래스가 제공해준다

const express = require('express')

const router = express.Router()

router.use(function timeLog(req,res,next) {

  console.log('Time: ', Date.now())

  next()

})

router.get(...)

router.delete(...)

router.post(...)

module.exports = router //module로 만들어서 root의 index.js에서 사용할 수 있게 한다

 

2) root/index.js 에서는 생성한 module을 사용한다

const user = require('./api/user') //마지막 index라는 키워드는 생략이 가능하다 require('./api/user/index.js') 와 같음

app.use('/users', user) //users에 대한 모든 경로에 대해서는 user router를 사용하겠다

 

3. Router를 Control 단위로 세분화 한다

1) root/api/user/user.ctrl.js 파일을 생성한다

user/index.js에 작성했던 app.get()~ 등의 함수 코드를 다음과 같이 옮겨 올 수 있다

const index = (req, res) => { ...

}

const show = (req, res) => { ...

}

module.exports = {

  index,

  show

}

 

2) root/api/user/index.js 에서는 다음과 같이 생성한 control들을 사용할 수가 있다

const ctrl = require('./user.ctrl')

router.get('/', ctrl.index)

router.get('/:id', ctrl.show)

 

3) control이 사용하는 데이터도 함께 ctrl 소스 파일로 옮겨와야 한다

let users = [

    {id:1, name:'Alice'},

    {id:2, name:'Bek'},

    {id:3, name:'Chris'}

]

 

4. Test Case를 작성한 테스트 파일들도 소스 코드들과 같은 경로로 옮겨준다

  가령, root/api/user 폴더 안에 생성한 index.js 의 router 테스트 파일 index.spec.js은

  root/api/user/user.spec.js 으로 명명하여 옮기고 내부에서 root/index.js를 require하는 코드의 경로도 상대 경로로 바꿔준다

  => const app = require('../../index')

 

5. package.json 내에 선언한 scripts test 파일들에 대한 설정 내용도 다음과 같이 바꾼다

  "scripts" : {

    "test" : "mocha ./api/**/*.spec.js" <- api경로 아래의 모든 *.spec.js 파일들을 테스트하겠다

  }

번호 제목 글쓴이 날짜 조회 수
36 no pooling 상태에서 beginTransaction 콜백을 이용한 Transaction 처리 황제낙엽 2021.01.16 15
35 mysql.escape()로 where 문 작성 황제낙엽 2021.01.16 47
34 req, res 객체 황제낙엽 2021.01.14 19
33 mysql basic (mysql 설치, 접속, 조회) 황제낙엽 2021.01.12 18
32 urlencode : request params의 한글 처리 황제낙엽 2020.12.06 99
31 express 4.16부터는 body-parser를 내장한다 황제낙엽 2020.12.06 268
» [TDD/REST-7강] 코드 리팩토링 (express.Router, control) 황제낙엽 2020.12.04 46
29 [TDD/REST-6강] 사용자 API 개발 황제낙엽 2020.12.03 29
28 [TDD/REST-목차][T아카데미] Node.js 기반의 REST API 서버 개발 file 황제낙엽 2020.12.03 15
27 [TDD/REST-5강] TDD로 API 서버 개발 (작업절차, get users 테스트) 황제낙엽 2020.12.01 11
26 [TDD/REST-4강] TDD 이해 및 환경 구축 (Rest API, TDD, mocha, Should, SuperTest) 황제낙엽 2020.12.01 18
25 google oatuh passport file 황제낙엽 2020.11.12 18
24 google oauth 인증 (구글 로그인) file 황제낙엽 2020.11.12 84
23 express-sse 모듈과 EventEmitter 황제낙엽 2020.09.20 265
22 [Node Package Manager] npm audit file 황제낙엽 2020.09.17 5
21 Node.js , NPM 관련 명령어 정리 황제낙엽 2020.09.10 141
20 [Deprecated] request / request 황제낙엽 2020.08.26 123
19 dotenv (Node.js 기반에서 환경변수 사용하기) 황제낙엽 2020.08.23 81
18 로깅툴 morgan (Logging) 황제낙엽 2020.08.19 12
17 nodemon 설치 및 활용 file 황제낙엽 2020.08.16 102