본문 바로가기
TIL

TIL D-75 Nodejs 로 스토어 만들기_라우터

by 홍차23 2019. 11. 17.

express.Router

라우팅이란 애플리케이션 엔드포인트(URI)의 정의, 그리고 URI가 클라이언트 요청에 응답하는 방식이다.

express.Router 클래스를 사용하면 모듈식 마운팅 가능한 핸들러를 작성할 수 있다. Router 인스턴스는 미들웨어로, 라우터 모듈에서 미들웨어 함수를 로드한다. (미들웨어란 구조 내에서 중간 처리를 위한 함수이다. use() 안에 들어가는 함수. 먼저 로드되는 미들웨어 함수가 먼저 실행된다. 순서가 중요!) 따라서 Router 란 라우터 단위로 request 가 발생하면 실행되거나, 특정 라우터가 실행되었을 때마다 실행되는 미들웨어이다.

 

app.use(index) // 정적파일을 제외한 모든 요청을 index 미들웨어가 처리한다.

app.use('/', indexController) // 특정 주소('/')의 요청이 있을 때만 설정한 미들웨어 indexController를 실행한다.

 

app.use(); // 애플리케이션의 모든 라우터에 대한 미들웨어를 마운트

router.use(); // 특정 라우터에 대한 미들웨어를 마운트, subpath 를 정의하기 위해서 사용함.

 

route parameters 란 url 안의 특정 위치에서 변수를 추출하기 위한 url segment 이다.

http://localhost:3000/products/23 와 같은 url 이 서버에 도착했다면,

router.use('/products/:productsId', function(req,res) { // :변수 를 추출한다.

res.send(req.params)

});

 

이상으로 express.Router 미들웨어에 대해 간략히 알아보았다.

 

코드 간결화

라우트는 라우팅을 위한 Router 클래스를 사용하고,

컨트롤러에 api 동작 부분만 모듈화시켜서 코드를 간결하게 만든다.

예) user디렉토리에 index.js 는 라우팅을 담당하고, user.ctrl.js 는 api 동작 코드를 담는다.

이렇게 하면 프로젝트의 루트 디렉토리(/) 에 있는 index.js 에서 app.use('/users', user); 를 통해 /users 요청을 모두 /user/index.js 로 보낸다. 

// controllers>home>index.js
const { Router } = require('express');
const ctrl = require('./user.ctrl');

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

module.exports = router;

 

아래는 스토어쪽 index.js 라우터이다. 

// index.js router.use('/', require('./home')); // 홈 router.use('/products', require('./products')); // 스토어 router.use('/cart', require('./cart')); // 장바구니 router.use('/checkout', require('./checkout')); // 결제페이지

 

api 스펙

GET /products/:id

상품을 불러온다. (태그, 생성날짜, 상세설명, 하트 포함)

POST /proudcts/like/:product_id 하트 표시한 상품
GET /checkout 결제 api
GET /checkout/complete 결제완료 api
POST /checkout/complete 결제정보 작성 api
GET /checkout/success 결제완료 api
GET /cart 장바구니(총결제금액, 제품리스트, 총가격) api

 

'TIL' 카테고리의 다른 글

TIL D-73 Xd 와이어프레임 만들기  (0) 2019.11.20
TIL D-74 User Requirements 작성  (0) 2019.11.19
TIL D-76 heap sort  (0) 2019.11.16
TIL D-78 교육봉사 시작  (0) 2019.11.14
TIL D-80 중첩 json  (0) 2019.11.12

댓글