본문 바로가기
Research/Node.js

Express.js_router 분리하는 방법

by RIEM 2023. 3. 24.
728x90

app.ts에 라우터들을 따로 분리해주자. 라우터들이 더 쌓이면 유지보수가 어려워지기 때문이다.

cats 폴더 내 model과 router를 넣어두었다. model은 데이터가 든 파일인데 무시하자. router.ts에 집중하자.

// app.ts

import * as express from 'express';

// 라우터 가져와서..
import catsRouter from './cats/cats.route';

const app: express.Express = express();

const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// logging middlewares
app.use((req, res, next) => {
  console.log(req.rawHeaders[1]);
  console.log('this is middleware!');
  next();
});

// json middleware
app.use(express.json());

// 위에서 가져온 라우터 여기서 사용!
app.use(catsRouter);

// 404 middleware
app.use((req, res, next) => {
  console.log('Error Middleware');
  res.send({ error: '404 not found error' });
});

app.listen(8000, () => {
  console.log('listening on port 8000');
});

json middleware와 404 middleware 사이에 catsRouter를 사용했다. 이를 사용하기 위해 위에서 임포트 했다. 이 라우터는 어디서 왔을까? 아래를 확인해보자.

// cats/cats.router.ts

// app 객채가 구분되는 것을 이어줄 필요가 있음
import { Router } from 'express';

// router 인스턴스 생성
const router = Router();

// READ 데이터 조회
router.get('/cats', (req, res) => {
  try {
    const cats = { data: 'data example' };
    // throw new Error('db connect error');

    res.status(200).send({
      success: true,
      data: {
        cats,
      },
    });
  } catch (error) {
    res.send({
      succes: false,
      error: error.message,
    });
  }
});

// READ 특정 데이터 조회
// 동적 라우팅 <= :id 파라미터를 활용
router.get('/cats/:id', (req, res) => {
  try {
    const params = req.params;
    console.log(params);
    // const cats = Cat.find((cat) => {
    //   return cat.id ===
    // })

    const cats = { data: 'data example' };

    res.status(200).send({
      success: true,
      data: {
        cats,
      },
    });
  } catch (error) {
    res.send({
      succes: false,
      error: error.message,
    });
  }
});

// CREATE 데이터 생성
router.post('/cats', (req, res) => {
  try {
    const data = req.body; // json 바디값은 미들웨어 필요
    console.log(data);
    // 데이터 DB에 저장하는 create코드 생성할것
    res.status(200).send({
      success: true,
      data: {},
    });
  } catch (error) {
    res.status(400).send({
      success: false,
      error: error.message,
    });
  }
});

// router 인스턴스 등록
export default router;

라우터 소스코드를 보면 라우터 인스턴스를 만든 뒤 export 해준다. app.ts에서 사용하는 바로 그 라우터 파일이다.

728x90

'Research > Node.js' 카테고리의 다른 글

node.js_zip and unzip  (0) 2023.09.20
Express.js_싱글톤 패턴, 비즈니스 로직 분리  (0) 2023.03.24
Express.js_CRUD API  (0) 2023.03.24
Express.js_미들웨어 사용 방법  (0) 2023.03.24
Express.js_typescript로 시작하는 방법  (0) 2023.03.23

댓글