본문 바로가기
공부/노드

express - 라우터

by 야옹아옹 2021. 6. 24.

Router 객체로 라우팅 분리하기

app.js에 모든 라우팅을 설정하면 app.js 코드가 너무 길어져서 유지보수하기가 힘들다.

routes 폴더를 만들어서 따로 라우터 파일들을 모두 관리한다.

routes 폴더는 MVC 패턴에서 Controls을 담당한다. 

라우팅 분리하는 순서

  1. routes 폴더생성한다.
  2. routes 폴더에 분리할 라우팅 파일을 생성한다. ( index.js, users.js ... )
  3. 각각의 라우팅 파일을 사용하기 위해 app.js 파일에 불러와 설정을 해준다.

 

index.js 파일 코드

const express = require('express');

const router = express.Router();

// GET / 라우터
router.get('/',(req,res)=>{
  res.send('안녕~ 익스프레스');
});

module.exports = router;

라우터 파일을 만들었지만 바로 사용할 수없다. app.js에서 설정을 해주어야한다

 

반드시 app.js라우터를 설정해주어야한다.

app.js 파일 코드

// 라우터 가져오기
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');

// ...

// 라우터 사용하기
app.use('/',indexRouter);
app.use('/user', usersRouter);

라우터를 가져와서 사용할 수 있다.


라우트 매개변수 패턴

라우터 주소정규표현식을 비롯한 특수 패턴사용할 수 있다.
// 라우터 매개변수 패턴
// localhost:3000/user/1
router.get('/:id',(req,res)=>{
  const userId = req.params.id; // 
  res.send(userId);
});

:id 에서 id는 다른 문자가 될 수있다. (ex. :number );

해당 부분의 값은 req.parmas.프로퍼티명 으로 가져올 수 있다. 

💘 주의사항

이 패턴을 사용한 라우터는 일반 라우터보다 뒤에 위치해야한다. 그렇지 않으면 다른 뒤에있는 라우터가 실행되지않는다. 

이유 ) 맨아래 존재하지않으면, localhost:3000/1 가 코드 순서 상 먼저 읽혀 매개변수 패턴으로 연결되고, localhost:3000/article 도 매개변수 패턴 라우터로 끌려들어가기 때문이다.

라우트 쿼리 스트링 패턴

쿼리 스트링을 사용한다. 쿼리 스트링 req.query 객체 안에 들어있다.

// 쿼리스트링을 사용하는 패턴
// localhost:3000/user?id=1000
router.get('/test',(req,res)=>{
  const qr = req.query.id;
  return res.send(`쿼리스트링 ${qr}`);
})

?id=333 부분이 쿼리스트링이다.

쿼리스트링을 req.qurey.키 를 사용해 가져올 수 있다.

 

라우터를 위한 에러 처리 미들웨어

app.js 에러 처리 미들웨어를 두어서 일치하는 라우터가 없을 경우 404상태 코드를 응답하도록 한다.

 

// 없는 라우트에 접근할 경우 에러를 처리할 에러처리 미들웨어
// 이 라우터가 없다면 자체 내장 에러 처리 문구를 보여준다.
app.use((req,res,next)=>{
  res.status(404).send('Not Found');
});

관련있는 라우터묶기

관련있는 라우터를 router.route 메서드를 사용해 묶을 수 있다.

// get과 put 같이 관련있는 코드를 붙여서 쓸 수 있다.
router.route('/hi')
  .get((req,res)=>{
    res.send('GET');
  })
  .post((req,res)=>{
    res.send('POST');
  })

getpost 메서드가 똑같은 라우터 주소를 가지고 있기때문에 중복으로 쓰지않고 router.route를 사용해 주소를 한 번만 쓰고 라우터를 작성할 수 있다.


참고자료

Node.js 교과서

'공부 > 노드' 카테고리의 다른 글

jwt - req.headers.authorization이 undefined인 에러  (0) 2021.06.28
express - req와 res 객체  (1) 2021.06.24
express- multer  (0) 2021.06.24
express 미들웨어  (0) 2021.06.23
express 시작하기  (1) 2021.06.23

댓글