[express] Router

dk.han·2022년 10월 13일
0

Router

같은 경로에 대해서 get, post 같은 요청 메소드를 나눠서 여러줄 쓰게되면 비슷한 코드가 반복적으로 쓰인다.

import express from 'express';
![](https://velog.velcdn.com/images/daekuenhan/post/5f6b9bc3-7b92-432e-99a6-8668d1f705af/image.png)

const app = express();

app.use(express.json());

app.get('/posts', (req, res) => {
  res.status(201).send('GET: /posts');
});

app.post('/posts', (req, res) => {
  res.status(201).send('POST: /posts');
});

app.put('/posts/:id', (req, res) => {
  res.status(201).send('PUT: /posts/:id');
});

app.delete('/posts/:id', (req, res) => {
  res.status(201).send('DELETE: /posts/:id');
});

app.listen(8080);

이런 경우 app.route()를 사용 하면 아래와 같이 정리 할 수 있다. app.route(경로)를 써준 후 체이닝 형태로 요청 method를 추가해주면 된다.

app
  .route('/posts')
  .get((req, res) => {
    res.status(201).send('GET: /posts');
  })
  .post((req, res) => {
    res.status(201).send('POST: /posts');
  });

app
  .route('/posts/:id')
  .put((req, res) => {
    res.status(201).send('PUT: /posts/:id');
  })
  .delete((req, res) => {
    res.status(201).send('DELETE: /posts/:id');
  });

모듈성 있게 작성해 보기

서버의 규모가 커지고 복잡해지는 경우 여러가지 경로가 존재하기 때문에 하나의 파일 안에 모든 API를 작성하는 것은 가독성이 좋지 않고, 모듈성이 떨어지며, 유지보수에 좋지 않다.
이를 개선하기 위한 방법으로 router를 이용해 url별로 모듈성있게 코드를 작성하는 것이다.

import express from 'express';
import userRouter from './routes/user.js';
import postRouter from './routes/post.js';

const app = express();

app.use(express.json());

app.use('/users', userRouter);
app.use('/posts', postRouter);

app.listen(8080);

userRouter, postRouter에 작성된 자세한 코드를 살펴보자
보통 const app = express()를 했었는데 이것이 아닌 const router = express.Router()를 사용하면 된다.

이때는 app.get 이런식이 아닌 router.get 이런식으로 작성해야 한다.
그리고 app.js에 최상위 경로를 작성해 놓았으므로 '/posts' 식으로 쓰지 않고
'/'라고 작성하고 그 뒤에 오는 경로를 작성해 주면 된다.

다 작성 한 후 export default router; 를 꼭 작성해주어야 한다.

import express from 'express';

const router = express.Router();

router.use((req, res, next) => {
  console.log('middleware for posts!');
  next();
});

router.get('/', (req, res) => {
  res.status(201).send('GET: /posts');
});

router.post('/', (req, res) => {
  res.status(201).send('POST: /posts');
});

router.put('/:id', (req, res) => {
  res.status(201).send('PUT: /posts/:id');
});

router.delete('/:id', (req, res) => {
  res.status(201).send('DELETE: /posts/:id');
});

export default router;

Reference

노드로 배우는 백엔드 A-Z

0개의 댓글