ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Express - Router 라우팅 , req , res
    Express.js 2021. 9. 25. 05:54

    익스프레스를 사용하는 이유 중 하나는 라우팅을 깔끔하게 관리할 수 있다는 점이다.

    // routes/index.js
    
    const express = require('express');
    
    const router = express.Router();
    
    router.get('/',(req,res) => {
        res.send('Hello , Express');
    });
    
    module.exports = router;
    // app.js
    
    const path = require('path');
    
    dotenv.config();
    const indexRouter = require('./routes');
    const userRouter = require('./routes/user');
    
    app.use('/',indexRouter);
    app.use('/user',userRouter);
    
    app.use((req,res,next) => {
        res.status(404).send('Not Found');
    });
    
    ...

    ./routes = ./routes/index.js

    indexRouter는 use의 '/'와 get의 '/'가 합쳐져 GET / 라우터가 되었다.
    userRouter는 usedml '/user'와 get 의 '/'가 합쳐져 GET /user 라우터가 되었다.

    라우트에 연결된 나머지 미들웨어들을 건너뛰고 싶을 때 next('route') 를 사용한다.

    router.get('/',function(req,res,next){
        next('route');
    },(req,res,next) => {
        console.log('실행되지 않습니다');
        next();
    },(req,res,next) => {
        console.log('실행되지 않습니다');
        next();
    });
    
    router.get('/',function(req,res){
        console.log('실행된다.');
        res.send('Hello, Express');
    });

     

    [ 라우트 매개변수 ]

     

    주소에 :id가 있다. 이 부분에 다른 값을 넣을 수 있다.

    /users/1 이나 users/123 등의 요청을 처리한다.

    :id에 해당하는 값은 req.params 객체 안에 들어 있다.

    :id => req.params.id
    :type => req.params.type

    일반 라우터보다 뒤에 있어야 한다.

    router.get('/user/:id',function(req,res){
        console.log('얘만 실행됩니다.');
    });
    router.get('/user/like',function(req,res){
        console.log('전혀 실행되지 않습니다.');
    });

    주소에 쿼리스트링을 사용하는 경우도 있다.
    쿼리스트링의 키-값 정보는 req.query 객체 안에 있다.

    /user/123?limit=5&skip=10
    
    req.params = { id : '123' }
    req.query = { limit : '5' , skip : '10' }

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

    [ req ]

    • res.writeHead, res.write , res.end 사용 가능
    • res.send , res.sendFile 메서드 많이 사용
    • req.app : req 객체를 통해 app 객체에 접근 할 수 있다. ex ) req.app.get('port')
    • req.body : body-parser 미들웨어가 만드는 요청의 본문을 해석한 객체
    • req.cookies : cookie-parser 미들웨어가 만드는 요청의 쿠키를 해석한 객체
    • req.ip : 요청의 ip 주소가 담겨져 있다.
    • req.params : 라우터 매개변수에 대한 정보가 담긴 객체
    • req.query : 쿼리스트링에 대한 정보가 담긴 객체
    • req.signedCookies : 서명된 쿠키들은 req.cookies 대신 여기에 저장
    • req.get(헤더 이름 ) : 헤더의 값을 가져오고 싶을 떄 사용하는 메서드

     

    [ res ]

    • res.app : app 객체 접근
    • res.cookie( 키 , 값 , 옵션 ) : 쿠키 설정
    • res.clearCookie( 키 , 값 , 옵션 ) : 쿠키 제거
    • res.end() : 데이터 없이 응답
    • res.json(JSON) : JSON 형식의 응답
    • res.redirect(주소) : 리다이렉트할 주소와 함께 응답
    • res.send(데이터 ) : 데이터와 함께 응답 보냄

    'Express.js' 카테고리의 다른 글

    JWT  (0) 2021.09.24
    Express - Middleware  (0) 2021.09.20

    댓글

Designed by Tistory.