2017. 12. 5. 13:57ㆍJavaScript/NodeJS
Express.js의 라우팅은 URI(경로), HTTP 요청 Method(GET, POST 등)의 특정 엔드포인트에 대한 클라이언트 요청에 응답하는 방법을 결정하는 것을 말합니다.
라우트 Method 설정
라우터의 기본 구조는 다음과 같습니다.
app.method(path, handler)
- method - HTTP 요청 Method
- path - 엔드포인트 경로
- handler - 클라이언트 접속 시 실행 되는 함수
위의 구조를 보듯이 각 메소드 별로 처리 라우터를 지정할 수 있다.
1. GET 방식 호출
1 2 3 | app.get('/', (req, res) => { res.send('Hello World!'); }); |
2. POST 방식 호출
1 2 3 | app.post('/', (req, res) => { res.send('Got a POST request'); }); |
3. PUT 방식 호출
1 2 3 | app.put('/user', (req, res) => { res.send('Got a PUT request at /user'); }); |
4. DELETE 방식 호출
1 2 3 | app.delete('/user', (req, res) => { res.send('Got a DELETE request at /user'); }); |
5. 모든 Method 접근 허용
1 2 3 | app.all('/', (req, res) => { console.log('All Method request ...'); }); |
라우트 경로 설정
라우트 경로는 문자열 또는 문자열 패턴 그리고 정규식으로 지정할 수 있습니다.
1. 문자열
기본은 위의 예제와 같이
1 2 3 | app.get('/', (req, res) => { res.send('Hello World!'); }); |
이렇게 호출 됩니다.
/about 에 접근하자 할 경우에는 다음과 같이 작성을 하면 됩니다.
1 2 3 | app.get('/about', (req, res) => { res.send('about'); }); |
2. 문자열 패턴
다음 예제는 경로가 /abcd 또는 /acd 에 접근이 가능하도록 합니다.
1 2 3 | app.get('/ab?cd', (req, res) => { res.send('ab?cd'); }); |
다음 예제는 /abcd 또는 /abbbbbbcd 등의 경로에 접근이 가능하도록 합니다.
1 2 3 | app.get('/ab+cd', (req, res) => { res.send('ab+cd'); }); |
다음 예제는 /abcd 또는 /ab123cd 등과 같이 ab와 cd 사이에 어떠한 문자가 와도 접근이 가능하도록 합니다.
1 2 3 | app.get('/ab*cd', (req, res) => { res.send('ab*cd'); }); |
3. 정규식
다음은 예제는 a가 포함된 모든 경로에 접근하도록 합니다.
1 2 3 | app.get(/a/, (req, res) => { res.send('/a/'); }); |
다음 예제는 fly로 끝나는 경로에 접근이 가능하도록 합니다.
1 2 3 | app.get(/.*fly$/, (req, res) => { res.send('/.*fly$/'); }); |
라우트 핸들러(Callback 함수)
라우팅 핸들러는 하나 이상으로 설정이 가능합니다.
1 2 3 | app.get('/example', (req, res) => { res.send('Hello from A!'); }); |
위와 같이 라우터 핸들러를 하나만 가지는걸 기본으로 하지만 다음과 같이 1개 이상의 라우터 핸들러를 처리할 수도 있습니다. 그러기 위해서는 next() 를 반드시 호출해 줘야 합니다.
1 2 3 4 5 6 | app.get('/example', function (req, res, next) { console.log('the response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from B!'); }); |
위와 같이 next를 사용하면 다음 핸들러를 호출할 수 있습니다.
또한 함수들을 만들어서 배열 형태로 라우트 처리를 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } var cb2 = function (req, res) { res.send('Hello from C!'); } app.get('/example', [cb0, cb1, cb2]); |
Console 결과는 다음과 같습니다.
1 2 3 | CB0 CB1 Hello from C! |
app.route()
라우트 경로에 대한 체인이 가능하도록 작성이 가능합니다.
정의된 체인 라우트 핸들러는 다음과 같이 사용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | app.route("/chain") .all((req, res, next) => { console.log('Time: ', Date.now()); next(); }) .get((req, res) => { console.log("GET call~"); res.send("LIST BOOK~~~~"); }) .post((req, res) => { console.log("POST call~"); res.send("INSERT BOOK~~~~"); }) .put((req, res) => { console.log("PUT call~"); res.send("UPDATE BOOK~~~~"); }) .delete((req, res) => { console.log("DELETE call~"); res.send("DELETE BOOK~~~~"); }); |
express.Router
express.Router을 사용하면 모듈식 라우트 핸들러를 작성할 수 있습니다.
express.Router로 작성은 Java 웹프로그램으로 따졌을 때 Controller과 비슷하다(??) 라고 할 수 있을 듯하네요.
위의 chain route를 기준으로 모듈 작성은 다음과 같이 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | const express = require("express"); const router = express.Router(); router.route("/") .all((req, res, next) => { console.log('Time: ', Date.now()); next(); }) .get((req, res) => { console.log("GET call~"); res.send("LIST BOOK~~~~"); }) .post((req, res) => { console.log("POST call~"); res.send("INSERT BOOK~~~~"); }) .put((req, res) => { console.log("PUT call~"); res.send("UPDATE BOOK~~~~"); }) .delete((req, res) => { console.log("DELETE call~"); res.send("DELETE BOOK~~~~"); }); module.exports = router; |
이렇게 모듈을 생성을 하고 app메서는 다음과 같이 로딩합니다.
1 2 3 4 5 6 7 8 9 10 | const express = require("express"); const app = express(); const chain = require("./chain"); app.use("/chain", chain); app.listen(3000, () => { console.log( "Express Server port 3000"); }); |
그리고 최종적으로 브라우저에서 확인을 해보면 결과를 확인할 수 있습니다.
'JavaScript > NodeJS' 카테고리의 다른 글
[NodeJS] Express.js - Hello World!!! (0) | 2017.12.05 |
---|---|
[NodeJS] Express.js 시작 (0) | 2017.12.05 |
[NodeJS] 서버 만들기(HTTP Server) - 2 (0) | 2017.11.28 |
[NodeJS] 서버 만들기(HTTP Server) - 1 (0) | 2017.11.27 |
[NodeJS] File System (0) | 2017.11.16 |