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가 출력된다.
'web > node.js' 카테고리의 다른 글
node.js에서 winston.js를 이용하여 로그 남겨보기. (0) | 2018.10.05 |
---|---|
테스트 모듈 Assert 정리 (0) | 2018.10.05 |
node.js에서 NODE_ENV를 사용하여 개발, 운영 환경 구분하기. (0) | 2018.10.04 |
Node js 테스트 프레임워크 Mocha (0) | 2018.10.04 |
npm 설치시 ENOSELF 오류 해결 방법 (0) | 2018.05.27 |