공부하는 블로그

Node.js | Express : Routing 본문

Node.js

Node.js | Express : Routing

치킨닮은닭 2019. 12. 19. 21:38

Routing

 라우팅(Routing)은 URL 및 특정 HTTP 요청 방식(GET, POST)에 대한 클라이언트의 요청에 응답하는 방법을 선택하는 것이다. 각각의 라우터(Router)는 하나 이상의 핸들러 함수를 가질 수 있다. 만약 다수의 핸들러 함수를 지정해주려면 함수의 로직 끝에 꼭 'next()'를 붙여주도록 하자.

 

 라우터를 정의하는 기본적인 방법은 요청 방식에 따라 'app.get()' 또는 'app.post()'이다. 두 메소드는 경로(path)와 핸들러 함수(handler funtion)을 파라미터로 받는다.

 

// 여기서 app은 express의 인스턴스
app.get('/', function(req, res) {
  res.send('GET request to the root');
});

app.post('/', function(req, res) {
  res.send('POST request to the root');
});

app.get('/path', function(req, res) {
  console.log('GET request to the /path');
  next();	// 둘 이상의 핸들러 함수를 사용하기 위함.
}, function(req, res) {
  res.send('This is /path page!');
});

 

 만약 경로가 중복되는 라우터가 많을 경우 중복되는 라우터를 하나로 묶는 모듈화를 통하여 구조화시킬 수 있다. 라우트를 구조화하여 웹 서버를 구현해보자.

 

var express = require('express');
var app = express();

app.get('/', function (req, res) {
    res.send('This is main');
});

app.get('/board', function (req,res) {
    res.send('This is board list');
});

app.get('/board/write', function (req, res) {
   res.send('This is board write');
});

app.get('/board/detail', function (req, res) {
    res.send('This is board detail');
});

app.get('/board/update', function (req, res) {
    res.send('This is board update');
});

app.listen(3000, () => console.log('Server listen on port 3000...'));

 

 위의 서버 코드는 '/board' 경로 요청이 중복되는 경우가 많다. 이를 간단하게 구조화하기 위해 'Router()'를 이용해보자.

 

// /router/board.js
var express = require('express');
var router = express.Router();

router.get('/', function (req,res) {
    res.send('This is board list');
});

router.get('/write', function (req, res) {
   res.send('This is board write');
});

router.get('/detail', function (req, res) {
    res.send('This is board detail');
});

router.get('/update', function (req, res) {
    res.send('This is board update');
});

module.exports = router;

 

 중복되는 경로('/board')에 대한 응답 처리만 따로 분리하여 router 폴더에 작성하였다. express에 Router()를 이용하여 라우터 객체로 만든 후 각각의 추가 경로에 대한 핸들러 함수를 추가하였다. 만들어진 라우터는 외부(app.js)에서 불러서 사용하기 위해 export 해주었다.

 

// app.js
var express = require('express');
var app = express();
var boardRouter = require('./router/board.js');

app.get('/', function (req, res) {
    res.send('This is main');
});

app.use('/board', boardRouter);

app.listen(3000, () => console.log('Server listen on port 3000...'));

 

 이제 만들어진 라우터를 app.js에서 불러와 사용할 차례이다. 모듈화된 라우터 객체를 임포트하여 'app.use()'를 통해 라우터를 사용할 수 있도록 구현하였다. 'use()'는 첫번째 파라미터로 주소를 받아 특정 주소에 해당하는 http 요청이 들어오면 미들웨어인 라우터를 동작시킨다. 

 

 여러가지 미들웨어를 장착시킬 수도 있는데, 실제 라우터 로직이 실행되는 미들웨어 전에 로그인 여부 또는 관리자 여부를 체크하는 미들웨어를 중간에 넣어두곤 한다.

Comments