node.js

[node.js] Express_ Router객체

vhxpffltm 2019. 8. 24. 23:13

익스프레스를 사용하는 이유 중 하나는 라우팅을 깔끔하게 관리할 수 있다는 점이다.

 

app.js의 라우터 부분을 보자.

 

 

익스프레스 앱과는 달리 위와 같이 연결되어 있다. app.use를 사용하므로 라우터도 일종의 미들웨어라 생각하자. 다른 미들웨어와 가르게 앞에 주소가 붙어 있으니 첫번째 인자로 주소를 받아서 특정 주소에 해당하는 요청이 들어 왔을때, 미들웨어가 동작한다.

주소가 / 로 시작하면 routes/index.js 를 /user로 시작하면 routes/user.js를 호출하라는 의미이다.

 

use 대신 get,post,put,patch,delete 와 같은 HTTP 메서드를 사용할 수 있다. 

get, post  :  요청을 하는 것
sned, sendfile, json, render  : 응답을 보내는 것.

 

라우터 파일을 살펴보자. express-generator로 설치했으면 기본 라우터가 들어있다.

 

index.js

 

user.js

 

router 객체는 express.Router()로 만들었다. 마지막 코드로 라우터를 모듈로 만든다. router에도 app 처럼 위에 설명한 use, get 등의 메서드를 붙이며 use를 제외하고는 HTTP요청 메서드와 상응한다.

 

라우터 역시 하나에 미들웨어에 여러개를 장착할 수도 있다. 

 

코드를 살펴보자. router.get('/') 이면 /주소로 GET 요청을 하는 것이다. res.render 메서드로 클라이언트에 응답을 보내며 익스프레스가 응답 객체에 새로 추가한 메서드이다. 이 메서드는 템플릿 엔진을 사용한다. 참고로 템플릿 엔진에 대해 프론트앤드 부분은 자세하게 다루지는 않을 것이다.

 

User.js 역시 router.get('/') 이 있으며 app,js에서 app.use('/users', userRouter)로 연결했기에 /users와 /이 합쳐져 /users/로 GET 요청을 했을 때 이 라우터의 콜백 함수가 실행된다.

 

라우터에서는 반드시 요청에 대한 응답을 보ㅓ내거나 에러 핸들러로 요청을 넘겨야 한다. 그렇지 않으면 브라우저는 계속 응답을 기다려 다른 동작을 수행할 수 없다. res객체에 들어 있는 메서드들로 응답을 보낸다.

 

라우터에서 쓰이는 예제를 하나보자.

 

:id 에는 다른 값을 넣을 수 있다. /users/478 등의 요청은 이 라우터에 걸리며 :id 에 해당하는 값을 조회할 수 있다. req.params 객체 안에 있으며 :id 이면 req.params.id로 조회할 수 있다. 이 주소에 쿼리스트링을 쓸수도 있다.

 

에러가 발생하지 않았다면 라우터는 요청을 보낸 클라이언트에 응답을 보내주어야 한다. 응답 메서드는 send, sendFile, json, redirect, rend 등이 있다.

send는 버퍼데이터나 문자열, HTML 코드를 전송하기도 하고 redirect는 응답을 다른 라우터로 보낸다. 로그인 완료 후의 메인페이지를 생각하자.

render메서드는 템플릿 엔진을 랜더링할때 사용한다.

 

하나의 요청에 대한 응답은 한 번만 보내야 한다. 두 번 이상 보내면 에러가 발생한다.

'node.js' 카테고리의 다른 글

[node.js] Express_구조 와 미들웨어  (0) 2019.08.24
[Node.js] NPM 시작하기  (0) 2019.08.21
[Node.js] Node 내장 객체 및 모듈  (0) 2019.08.21
[node.js] 콜백 함수, 프로토타입  (0) 2019.08.17
[node.js] ES6 문법  (0) 2019.07.29