미들웨어

박소정·2024년 8월 26일
0

Node.js

목록 보기
13/23
post-thumbnail

미들웨어

미들웨어란?

  • 미들웨어는 익스프레스의 핵심이며, 요청과 응답의 중간(middle)에 위치하기 때문에 미들웨어(middleware)라고 부릅니다.

  • 미들웨어는 요청과 응답을 조작해 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 합니다.

  • app.use와 함께 사용됩니다.

  • 코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    const express = require("express");
    const path = require("path");
     
    const app = express();
    app.set("port", process.env.PORT || 3000);
     
    app.use((req, res, next) => {
        console.log("모든 요청에 다 실행됩니다.");
        next();
    });
    app.get(
        "/",
        (req, res, next) => {
            console.log("GET / 요청에서만 실행됩니다.");
            next();
        },
        (req, res) => {
            throw new Error("에러는 에러 처리 미들웨어로 갑니다.");
        }
    );
     
    app.use((err, req, res, next) => {
        console.error(err);
        res.status(500).send(err.message);
    });
     
    app.listen(app.get("port"), () => {
        console.log(app.get("port"), "번 포트에서 대기 중");
    });
    cs

    • next
      다음 미들웨어로 넘어가는 함수입니다.

    • 주소를 첫번째 인수로 넣어주지 않는다면 미들웨어는 모든 오청에서 실행됩니다.

    • 주소를 첫번째 인수로 넣어준다면 해당하는 요청에서만 실행됩니다.

실무에서 자주 쓰이는 패키지

  • 설치

    1
    npm i morgan cookie-parser express-session dotenv
    cs
  • 적용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    const express = require("express");
    const morgan = require("morgan");
    const cookieParser = require("cookie-parser");
    const session = require("express-session");
    const dotenv = require("dotenv");
    const path = require("path");
     
    dotenv.config();
     
    const app = express();
    app.set("port", process.env.PORT || 3000);
     
    app.use(morgan("dev"));
    app.use("/", express.static(path.join(__dirname, "public")));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser(process.env.COOKIE_SECRET));
    app.use(
        session({
            resave: false,
            saveUninitialized: false,
            secret: process.env.COOKIE_SECRET,
            cookie: {
                httpOnly: true,
                secure: false,
            },
            name"session-cookie",
        })
    );
     
    app.use((req, res, next) => {
        console.log("모든 요청에 다 실행됩니다.");
        next();
    });
    app.get(
        "/",
        (req, res, next) => {
            console.log("GET / 요청에서만 실행됩니다.");
            next();
        },
        (req, res) => {
            throw new Error("에러는 에러 처리 미들웨어로 갑니다.");
        }
    );
     
    app.use((err, req, res, next) => {
        console.error(err);
        res.status(500).send(err.message);
    });
     
    app.listen(app.get("port"), () => {
        console.log(app.get("port"), "번 포트에서 대기 중");
    });
    cs
    • dotenv
      env 파일을 읽어서 process.env로 만듭니다.

    • morgan

      • 콘솔 맨 아래 로그는 morgan 미들웨어에서 나오는 것입니다.

      • 요청과 응답에 대한 정보를 기록합니다.

      • app.use(morgan("dev"));

      • 개발 환경에선 dev, 배포 환경에서는 combined를 애용합니다.

    • static

      • 정적인 파일들을 제공하는 라우터 역할을 합니다.
    • body-parser

      1
      2
      app.use(express.json());
      app.use(express.urlencoded({ extended: false }));
      cs
      • 요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어줍니다.
    • cookie-parser

      • 요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만듭니다.

      • name=sojeong -> { name: 'sojeong'}

    • express-session

      • 세션 관리용 미들웨어입니다.

      • 로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장해둘 때 유용합니다.

0개의 댓글

관련 채용 정보