[TIL] express.Router();

sunriseGong·2021년 11월 2일
0

익스프레스의 라우터를 사용하는 이유는?

app.js 에 라우터를 많이 연결하면
코드가 길어져 복잡해질 수 있습니다.

(라우터 : app.js에서 app.get() 등의 메서드)

그래서 익스프레스에서는
라우터를 별도의 폴더로 분리해
라우팅을 깔끔하게 관리할 수 있도록
Router 객체를 제공합니다.


app.use 에 라우터를 연결 했을 때 주소의 변화는?

app.use 가 실행되면서 인수로 들어있는 라우터가 돌아가므로
app.use의 경로, router의 경로
위 순서대로 주소가 합쳐집니다.

const indexRouter = require('./routes');
const userRouter = require('./routes/user’);

app.use(/, indexRouter)
app.use('/user’, userRouter)

위 예제는
indexRouter 와 userRouter 가
각각 다른 주소의 라우터 역할을 하도록 합니다.

indexRouter는 
app.use의 '/'  +   router.get의 ‘/‘  ->  GET / 

userRouter는 
app.use의 '/user'  +  router.get의 '/'  -> GET /user

그래서 app.use 에 적은 주소는
라우터 파일에서 생략할 수 있습니다.

라우트 매개변수를 사용하면?
app.use('/user', userRouter)
userRouter 에서 router.get('/:id', ...) 이면
주소는 어떻게 합쳐질까요?
/user/:id 가 됩니다.


next() 와 next ('route') 는 어떤 역할을 하나요?

next()

다음 미들웨어로 넘어갑니다.

next(‘route’) 는

주소가 일치하는 다음 라우터로 넘어갑니다.
라우터에 연결된 나머지 미들웨어들을 건너뛰고 싶을 때 사용합니다.


라우트 매개변수 패턴에 대해 설명해주세요.

주소 뒤에 유동적인 값을 붙여서 요청을 보내고
주소 뒤의 값을 req.params 객체로 접근할 수 있는 방법

사용예시

router.get(/user/:id, (req, res) => {});
  • 요청시 /user/ 뒤에 :id에는 아무값이나 넣을 수 있습니다.
    ex ) /user/1 이나 /user/234 등의 요청도 이 라우터로 처리할 수 있습니다.

  • req.params 객체로 값을 조회할 수 있습니다.
    ex )
    :id 이면 req.params.id 에
    :type 이면 req.params.type 에 값이 있음

주의 사항

라우트 매개변수를 쓰는 라우터의 순서는
마지막에 배치해야 합니다.

/user/ 뒤의 값을 와일드카드로 받기 때문입니다.

router.get('/user/:id',(req,res)=>{...});
router.get('/user/like',(req,res)=>{...});                             

위의 경우 /user/like 주소로 요청이 오면 어떻게 될까요?

라우트 매개변수를 쓰는 첫번째 라우터만 실행 됩니다.
(req.params.id 에 like 라는 값이 들어가겠죠.)

두번째 /user/like 라우터는 새가 되는 거죠.

라우트 매개변수를 사용하는 라우터를 마지막에 배치하면 해결됩니다.


라우트 매개변수와 쿼리스트링을 함께 쓸 수도 있나요?

네.

주소에 쿼리스트링을 쓸 때도 있습니다.
쿼리스트링의 키-값 정보는
req.query 객체 안에 들어 있습니다.

ex)
/users/5?limit=5&skip=10

이라는 주소의 요청이 들어왔을 때

req.params 는 { id: '5' } 이 되고
req.query 는 { limit: '5', skip: '10' }


일치하는 라우터가 없는 경우 어떻게 되나요?

익스프레스가 자체적으로 404 에러를 처리해 줍니다.

하지만 에러처리 미들웨어를 자체적으로 달아주는 것이 좋습니다.


.route() 메소드는 어떤 역할을 하나요?

공통의 주소로 라우터들을 묶을 수 있습니다.

app.route(‘주소’)나 router.route(‘주소’)로 사용됩니다.

인자로 주소를 받습니다.

각 라우터의 주소는 같지만 메서드가 달라서
두개의 라우터로 작성한 코드를

router.get('/user',(req,res)=>{...})
router.post('/user',(req,res)=>{...})

하나의 라우터로 묶을 수 있습니다.

router.route('/user')
  .get((req,res)=>{...})
  .post((req,res)=>{...})

라우터에서 자주 쓰이는 활용법 입니다.


출처 : https://thebook.io/080229/ch06/03/

profile
심심해야 공부하게 된다.

0개의 댓글