web/node.js

node.js express 모듈 - router

반응형

Express 모듈은 node.js에서 핵심 모듈인 http와 connect 컴포넌트를 기반으로 하는 웹 프레임워크이다.

여기서 사용되는 router 기능에 대해 정리해보자.

기본적으로 express 모듈을 사용하기 위해서는 다음과 같이 모듈을 로드해야한다. router 의 기본 형태는 다음과 같다. 

1
2
3
4
5
6
const express = require('express');
const router = express();
 
// 기본 동작 형태
router.get('/' , (req, res, next) => {    
});
cs


기본 router 등록은 위와 같다. http 요청 메서드에 따라 메서드의 이름은 post, put, delete등으로 변경해서 사용하면 되고 첫번째 파라미터는 경로 두번째 파라미터는 callback 함수를 기재한다. 이 callback 함수들에 대해서는 밑에 자세히 적어보자.


요청 경로 형태

요청 경로는 일반적으로 정확하게 적을수도 있고 정규식을 사용하여 적을 수도 있다.
/ab?cd => /abcd, /acd (존재 또는 존재 하지 않음)
/ab+cd => /abcd, /abbcd (하나 또는 그이상)
/ab*cd => /abcd, abxcd, abkdjfalksdfjcd (중간에 아무값이나)
/ab(cd)?e => /abe, /abcde
/.*fly$/ => /butterfly, /dragonfly  fly 시작하는 어떤 문자


콜백함수

콜백함수는 한 개 이상 적을 수 있으며 기재한 순서대로 실행된다. 아래 예를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 콜백
var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}
 
var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}
 
app.get('/example/d', [cb0, cb1], function (req, res, next) {
  console.log('the response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from D!');
});
cs


위에 정의한 경로 /example/d로 요청이 들어온 경우 이런 순서로 출력된다.
CB0 => CB1 => the response will be sent by the next function => Hello From D!

이런 전달되는 callback 함수 형태를 사용하여 요청된 경로전에 검증 작업을 진행할 수 있다.
예를 들어 위에 함수에서 두 번재 함수인 cb1에서 Error을 던지면 그 다음 전파가 가지 않는다.

1
2
3
4
var cb1 = function (req, res, next) {
  console.log('CB1');
  next(new Error('test'));
}
cs


Response 응답 종류
res 응답을 전달하고 요청-응답 주기를 종료할  있다만약 어떠한 응답도 하지 않을경우에는 클라이언트 요청이 계속 대기중에 빠지기 때문에 무조건 res.end()라도 해줘야 한다.

메소드
설명
파일이 다운로드되도록 프롬프트합니다.
응답 프로세스를 종료합니다.
JSON 응답을 전송합니다.
JSONP 지원을 통해 JSON 응답을 전송합니다.
요청의 경로를 재지정합니다.
보기 템플리트를 렌더링합니다.
다양한 유형의 응답을 전송합니다.
파일을 옥텟 스트림의 형태로 전송합니다.
응답 상태 코드를 설정한  해당 코드를 문자열로 표현한 내용을 응답 본문으로서 전송합니다.


요청 모듈화

route를 하나의 파일에서 다 정의하는건 힘든일이다. 그래서 요청을 분할 할 수 있다. 각 router를 정의할 js 파일에서 express 모듈의 router를 추출한 후 경로를 지정한다. 그리고 app.js에서 각 모듈의 시작점을 지정해서 연결시켜준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#user.js
const express = require('express');
const router = express.router();
 
router.get(‘/’, () => {
    console.log(‘test’);
});
 
#product.js
const express = require(‘express’);
const router = express.router();
 
router.get(‘/‘, () => {
    console.log(‘product’);
});
 
#app.js
const express = require('express');
const app = express();
 
app.use(‘/user’, require(‘./user.js));
app.use(‘/product’, require(‘./product.js’);
cs


그러면 /user/으로 실행하는 경우 test가 /product/로 호출하는 경우 product가 출력된다.


반응형