express의 미들웨어 작성법

halloyun·2023년 12월 21일
post-thumbnail

미들웨어

미들웨어 함수는 요청 오브젝트, 응답 오브젝트, 그 다음의 미들웨어 함수에 대한 엑세스 권한으로 이루어져 있다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시된다.

해당 코드로 보면 결국 콜백 함수가 미들웨어다. 공부를 하면서 next()는 거의 사용하지 않아 익숙치 않았는데 아래 코드와 함께보면 아주 쉽다.

var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

기본적인 코드다. 여기서 미들웨어 함수는 당연히 myLogger루트 경로(/) 라우팅 후 불러오는 콜백함수다. 그러면 위에서부터 순서대로

  1. myLogger 생성
  2. use() 함수를 통해 미들웨어 호출
  3. next()를 통해 "/" 루트 경로로 요청보냄
  4. "Hello World" 응답

이 이루어진다.

미들웨어의 로드 순서가 중요해서, 만약 myLogger 함수가 루트 라우팅 후에 로드된다면 루트 경로의 라우트 핸들러는 응답이 끝난 후, 다음 미들웨어 함수로 요청을 전달하지 않아 루트 경로의 라우트 핸들러 안에서 요청-응답 주기는 끝난다.

비슷한 코드를 보자.

var express = require("express");
var app = express();

var requestTime = function (req, res, next) {
    req.requestTime = Date.now();
    next();
};

app.use(requestTime);

app.get("/", function (req, res) {
    var responseText = "Hello World!";
    responseText += "Requested at: " + req.requestTime + "";
    res.send(responseText);
});

app.listen(3000);

해당 코드도 위에서부터 읽어내려가면

  1. requestTime() 생성
  2. requestTime 미들웨어 호출해서 요청에 Date.now()를 담을 프로퍼티를 추가한다.
  3. next()를 통해 다음 미들웨어에 요청을 넘긴다.
  4. 루트 경로 라우팅 핸들러에 요청을 넘기고 해당 값을 출력하면 2번에서 담은 값을 출력하면서 응답이 종료된다.

공식문서

profile
안뇽! 자기소개는 밝게

0개의 댓글