라우팅이란?
특정 엔드포인트(경로(URI) + HTTP 요청 메소드)에 대한 클라이언트의 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말한다.
라우트는 다음과 같은 구조를 갖는다.
app.METHOD(PATH, HANDLER)
- app: express의 인스턴스
- METHOD: HTTP 요청 메소드
- PATH: 서버에서의 경로(정규표현식도 사용가능하다.)
- HANDLER: 라우트가 일치할 때 실행되는 콜백 함수
따라서, 다음과 같은 라우트는
app.get('/', function (req, res) {
res.send("Hello World!");
})
클라이언트에서 루트 라우트(/) 로 GET 요청을 보냈을 때, Hello World를 응답해준다.
METHOD: Express에서 지원하는 라우트 메소드
get, post, put, delete 같은 기본적인 HTTP 요청 메소드 뿐만 아니라,
head, options, trace, copy, lock 등의 많은 메소드를 지원한다. (자세한건 Express 공식 문서-라우팅 부분을 참고하는 것으로.. )
특수한 라우팅 메소드로는 app.all() 이 있는데,
all() 메소드를 사용하면 클라이언트 쪽에서 요청을 보낸 메소드의 종류에 상관없이 해당 경로에 대한 응답을 보낼 수 있다.
app.all('/', function (req, res) {
res.send("HTTP 요청 메소드에 상관없이 / 경로로 들어온 요청에 대해 모두 응답한다.");
})
HANDLER: 핸들러 함수
라우트가 일치할 때 실행되는 콜백 함수이다.
하나의 콜백 함수에서 하나의 라우트를 처리할 수 있다.
핸들러 함수의 파라미터는 다음 세가지이다.
- req: Request
- res: Response
- next: 다음 미들웨어 함수를 가리키는 오브젝트로, 제어를 후속 라우터에 전달한다.
따라서, next()를 사용해 다음 코드와 같이 하나의 라우트 안에서 2개 이상의 콜백함수를 실행할 수 있다.
app.get('/test', function(req, res, test) {
console.log('hello1');
next();
}, function(req, res) {
res.send('hello2'); // response로 hello2가 보내진다.
});
그 외에, 콜백함수를 배열 형태로 전달해서 라우트를 처리하는 것도 가능하다.
const cb1 = function(req, res, next) {
console.log('call back function 1');
next();
}
const cb2 = function(req, res, next) {
console.log('call back function 2');
next();
}
app.get('/example', [cb1, cb2]);
응답 메소드
- res.download(): 파일이 다운로드되도록 프롬프트한다.
- res.end(): 응답 프로세스를 종료한다.
- res.json(): JSON 응답을 전송한다.
- res.jsonp(): JSONP 지원을 통해 JSON 응답을 전송한다.
- res.redirect(): 요청의 경로를 재지정한다.
- res.render(): view 템플릿을 렌더링한다.
- res.send(): 다양한 유형의 응답을 전송한다.
- res.sendFile(): 파일을 octet() 스트림 형태로 전송한다.
- res.sendStatus(): 응답 상태 코드를 설정한 후 해당 코드를 응답 본문에 담아 전송한다.
라우터 분리하기(express.Router 사용)
express.Router 클래스를 사용해 라우트를 여러 개의 파일로 분리해서 처리할 수 있다.
routes 폴더를 생성하고, 폴더 안에 라우터 파일을 작성한다. (ex. comment.js, customer.js 등)
다음과 같이 라우터 파일을 작성함으로써 라우터 모듈을 생성할 수 있다 .
// 라우터 파일(파일명: comment.js)
const express = require('express');
const router = express.Router();
router.get('/get', function (req, res) {
res.send('get');
});
router.post('/insert', function (req, res) {
res.send('insert');
});
router.put('/update', function (req, res) {
res.send('update');
});
router.delete('/delete', function (req, res) {
res.send('delete');
});
module.exports = router;
생성한 라우터 모듈은 app.js에서 추가해서 사용할 수 있다.
const commentRoute = require('./routes/comment');
...
app.use('/comment', commentRoute);
Reference
- 도서 <Node.js 프로젝트 투입 일주일 전>
- Express 공식 사이트 - 라우팅: https://expressjs.com/ko/guide/routing.html
- Express 공식 사이트 - 기본 라우팅: dhttps://expressjs.com/ko/starter/basic-routing.html
'개발 > Node.js' 카테고리의 다른 글
[Node.js] 웹 서버 구축하기(Express) (0) | 2022.06.28 |
---|