gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • JSON
  • nestjs
  • SlackAPI
  • github
  • nest
  • Spring
  • springboot
  • 도커
  • AWS
  • 깃헙액션
  • 스프링부트
  • JWT
  • nodejs
  • 스프링
  • GithubActions
  • 슬랙알림
  • OAuth
  • oauth2
  • 네스트
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

📡 백엔드/⭐ Node.js

[Nodejs] Router 객체로 라우팅 파일 분리

2022. 5. 17. 01:29

✅ Router

주소별로 분기 처리를 할 때 app.js 에서 if문을 사용하게 된다면

코드가 복잡해지고 확장성이 떨어진다

express에서는 라우터를 분리하는 방법을 제공한다

 

🔨 Router 객체 생성

const express = require('express');
const router = express.Router();

 

✅ 예제

router 폴더 안에 index.js 와 user.js 를 나누어 라우터 파일을 생성했다

두 파일을 app.js 에서 사용해보는 예제

 

🔨 index.js

const express = require('express');
const router = express.Router();

router.get('/', (req, res) =>{
    res.send('this is index.js');
});

module.exports = router;

 

🔨 user.js

const express = require('express');
const router = express.Router();

router.get('/', (req, res) =>{
    res.send('this is user.js');
});

module.exports = router;

 

🔨 app.js

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

/* index.js 는 생략할 수 있다 */
const indexRouter = require('./router');
const userRouter = require('./router/user');

const app = express();

app.set('port', process.env.PORT || 3000);

/* 라우터 미들웨어 장착 */
app.use('/', indexRouter);
app.use('/user', userRouter);

app.use((req, res, next) => {
    res.status(404).send('Not Found');
})

app.listen(app.get('port'), ()=>{
    console.log(`Server online on port ${app.get('port')}`);
});

app.use((err, req, res, next)=>{
    console.error(err);
    res.status(500).send(err.message);
});

 

주소 '/' 에서 indexRouter 내의 router.get('/') 이 합쳐져 GET / 라우터가 되었다

주소 '/user' 에서 userRouter 내의 router.get('/') 이 합쳐져 GET /user 라우터가 되었다

 

이처럼 app.use 로 연결하면 주소가 합쳐지게 된다

 

GET /
GET /user

 

✅ 라우트 매개변수

라우터 주소에는 정규표현식과 같은 특수 패턴을 사용할 수 있다

그 중 라우트 매개변수는 다음과 같이 사용할 수 있다

 

🔨 user.js

const express = require('express');
const router = express.Router();

router.get('/:id', (req, res) =>{
    res.send(`this is user ${req.params.id}`);
});

module.exports = router;

GET /user/:id

req.params 객체 안에 값이 들어오게 된다

:id 는 req.params.id 로 조회할 수 있다

 

주의할 점은 일반 라우터보다 뒤에 위치해야 한다

이 방식은 와일드카드 역할을 하기 때문이다

 

 

🔨 user.js

const express = require('express');
const router = express.Router();

router.get('/:id', (req, res) =>{
    res.send(`this is user ${req.params.id}`);
});

/* 뒤의 경로는 실행되지 않음 */
router.get('/detail', (req, res) =>{
    res.send('ignored');
});

module.exports = router;

 

✅ 쿼리스트링

주소에 쿼리스트링이 들어오는 경우에는

req.query 객체에 값이 저장된다

/user/123?name=gengminy&age=20
{ name: 'gengminy', age: '20' }

 

✅ 메소드 체이닝

router.route 와 app.route 를 사용한 후

메소드 체이닝으로 관련 코드끼리 묶을 수도 있다

router.route('/user')
    .get((req, res) =>{
        res.send(`this is GET /user`);
    })
    .post((req, res) =>{
        res.send(`this is POST /user`);
    });

 

저작자표시 (새창열림)

'📡 백엔드 > ⭐ Node.js' 카테고리의 다른 글

[Nodejs] Sequelize 로 SQL 쿼리 사용하기  (0) 2022.05.21
[Nodejs] Sequelize 로 SQL 데이터베이스 연동하기  (0) 2022.05.21
[Nodejs] 미들웨어의 사용과 자주 쓰이는 미들웨어  (0) 2022.05.16
[Nodejs] express 서버 열기  (0) 2022.05.15
[Nodejs] 쿠키와 세션  (2) 2022.05.15
    '📡 백엔드/⭐ Node.js' 카테고리의 다른 글
    • [Nodejs] Sequelize 로 SQL 쿼리 사용하기
    • [Nodejs] Sequelize 로 SQL 데이터베이스 연동하기
    • [Nodejs] 미들웨어의 사용과 자주 쓰이는 미들웨어
    • [Nodejs] express 서버 열기
    gengminy
    gengminy
    코딩

    티스토리툴바