본문 바로가기

개발/Node.js

[Node.js] 라우팅 처리 구현(Express)

라우팅이란?

특정 엔드포인트(경로(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' 카테고리의 다른 글

[Node.js] 웹 서버 구축하기(Express)  (0) 2022.06.28