Express 라우터 분리하기

youngseoKim·2020년 2월 14일
4

NodeJS의 Express프레임워크는 라우터 분리 기능을 제공합니다.
기본적으로는 라우터를 구성할 때 다음과 같이 코드를 작성합니다.

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

app.get('/',(req,res,next) => {
  res.send('Hello world!');
});

웹 페이지에서 '/' 로 접근했을때 'Hello world!'가 보여지는 코드입니다.
하지만 프로젝트가 커지면, 라우터의 수가 늘어나게되고. 코드의 양도 많아짐에 따라 유지보수가 어려워지게 될 수 있습니다.

app.get('/users',(req,res,next) => {
	// response...
});
app.get('/books',(req,res,next) => {
	// response...
});
app.get('/users/:id',(req,res,next) => {
	// response...
});
app.get('/books/:id',(req,res,next) => {
	// response...
});

위의 코드는 user 와 book에 대한 리소스를 제공합니다.
예를 들어 '/users' 라우터에 대한 비지니스로직을 수정해야하면,
'book'에 대한 리소스를 제공하는 파일을 수정해야합니다.

express에서 제공하는 express.Router API를 사용하여
코드를 더 깔끔하게 수정을 해봅시다.

디렉토리에 router 폴더를 생성하고 users.js 파일을 생성합니다.
다음은 users.js 파일의 내용입니다.

const express = require('express');
const router = express.Router(); // 새로 생겼어요!

// router.get 으로 사용합니다
router.get('/', function(req, res) {
  // 모든 유저를 가져오는 코드...
  res.send('Users -> ',users);
});

module.exports = router // 새로 생겼어요!

'router' 라는 새로운 변수를 생성하였고,
'get' 메소드는 기존의 'app' 객체에서 호출했다면, 이번엔
새로 생성한 'router' 객체에서 호출했습니다.

그리고 'router' 객체를 exports 해서 모듈화를 했습니다.

이제 메인 서버 파일(app.js)을 열어 다음과 같이 수정합니다.

const usersRouter = require('./router/users'); // 새로 추가!
app.use('/users',usersRouter); // 새로 추가!

기존 'app.get' 을 썼다면 , 이번엔 'use' 메소드를 사용하여 미들웨어를 등록했습니다.

이렇게되면, 웹 페이지에서 '/users' 에 대한 요청을 할때
위에서 정의한 라우터 코드대로 작동하게 됩니다.

웹 브라우저에서 '/users' 로 접근하면
'users.js' 에서 작성한 '/' 의 로직이 수행되는걸 볼 수 있습니다.

이 뜻은 'users.js' 에서 작성한 라우터의 base한 url 은
'app.js' 에서 작성한 'app.use('/users',usersRoute)의 1번째 아규먼트인 '/users' 가 됩니다.

마찬가지로 'router' 폴더에 'books.js' 파일을 생성하고
라우터를 등록한 다음 , 'app.js'에 미들웨어로 등록한다면
라우터를 분리하여 코드를 작성할 수 있을 것입니다.

profile
현재 마크애니 블록체인팀에서 블록체인 솔루션과 DAPP 파트를 개발하고 있습니다. 서버 개발과 운영 , 클라우드 서비스에 관심이 많습니다.

1개의 댓글

comment-user-thumbnail
2020년 2월 19일

정리가 잘 되어 있는 글 감사합니다.

답글 달기