본문 바로가기

Node.js

Express Middleware: The Basics

What is Express Middleware?


소프트웨어의 레이어들 사이에 존재하는 모든 것들을 미들웨어라고 부른다. Express 미들웨어는 Express 서버에 들어온 요청이 실행되는 동안 실행되는 함수들을 말한다. 미들웨어는 각 라우트(route)의 HTTP requestHTTP response 에 접근할 수 있다. Express 자체가 미들웨어 함수들로만 이루어져 있다. 미들웨어는 HTTP request를 종료시킬 수도 있고, 다른 미들웨어 함수에 next 를 이용하여 넘겨줄 수도 있다.

Application-level Middleware


애플리케이션 레벨 미들웨어란 공식문서에 따르면, "앱 오브젝트의 인스턴스에 바인드된" 미들웨어이다. 라우터에 상관없이 Express 앱 인스턴스 전체에 적용되는 미들웨어라고 생각하면 될 것 같다. app.use()app.METHOD() 로 사용할 수 있다. 여기서 METHOD 는 GET, POST, PUT 과 같은 HTTP method 들이며 소문자로 적는다.

Example1

// server.js

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

app.get("/", (req, res, next) => {
  res.send("Welcome Home");
});

app.listen(3000);

express 를 설치하고 node server.js 로 서버를 실행시키면 브라우저를 통해 "Welcome Home"이 띄워진 것을 확인할 수 있다.

Example2

// server.js

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

app.use((req, res, next) => {
  console.log("This is application-level middleware");
  next();
});

app.get("/", (req, res, next) => {
  res.send("Welcome Home");
});

app.get("/hello", (req, res, next) => {
  res.send("HELLO");
});

app.listen(3000);

서버를 실행한 뒤 http://localhost:3000http://localhost:3000/hello 에 차례대로 접속해보자. 콘솔창에 "This is application-level middleware" 로그가 두 번 찍히는 것을 확인할 수 있다.

Router-level Middleware


라우터 레벨 미들웨어는 express.Router()의 인스턴스에 바인드된다는 점을 제외하고는 애플리케이션 레벨 미들웨어와 동일하다. router.use()router.METHOD()로 사용할 수 있다.

Example

// server.js

const express = require("express");
const app = express();
const router = express.Router();

router.get(
  "/",
  (req, res, next) => {
    console.log("first router-level middleware");
    next();
  },
  (req, res, next) => {
    console.log("second router-level middleware");
    res.send("HELLO");
  }
);

app.use((req, res, next) => {
  console.log("This is application-level middleware");
  next();
});

app.get("/", (req, res, next) => {
  res.send("Welcome Home");
});

app.use("/hello", router);

app.listen(3000);

서버를 실행한 뒤 http://localhost:3000/hello 로 접속하면 콘솔에 아래처럼 로그가 출력될 것이다.

This is application-level middleware
first router-level middleware
second router-level middleware

http://localhost:3000 로 접속할 때의 로그는 다음과 같다. 라우터 레벨 미들웨어는 실행되지 않은 것을 확인할 수 있다.

This is application-level middleware

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

Handling multipart/form-data with multer  (0) 2021.10.26
Express Project Structure  (0) 2021.09.28