Middleware 함수는 어플리케이션의 request-response cycle에서 next 함수와 request object와 response object에 접근할 수 있다.
next 함수는 Express의 router 함수로서, 호출되면 현재 미들웨어 다음에 실행될 미들웨어를 실행한다.

 

다음과 같은 역할을 담당할 수 있다.

  1. 특정한 code를 실행할 수 있다.
  2. request, response object들을 바꿀 수 있다.
  3. request-response object를 끝낼 수 있다.
  4. stack에서 next middleware를 호출할 수 있다.

 

만일 현재 middleware function이 request-response cycle을 끝내지 못한다면, 반드시 next() 를 호출하여 제어권을 다음 middleware function에 넘겨줘야 한다.

 

import * as express from "express";
import { Cat, CatType } from "./Cat/CatType";
import { error } from "console";

const app: express.Application = express();

// 아래의 router들을 살펴보면 동일한 logging 작업이 반복된다.
// 이를 middleware에서 처리하도록 한다. middleware는 맨 위에 적어줘야 한다
// 만일 맨 끝에 작성하게 되면 동작을 하지 않는다.

// app.use: router 전체에 대한 middleware
app.use((req, res, next) => {
  // next 함수: 다음 router로 이동할 수 있게 하는 함수.
  console.log("========================================");
  console.log("this is logging middleware");
  console.log(req.rawHeaders[1]);
  console.log("========================================");
  next();
});

app.get("/cats/som", (req, res, next) => {
  // next 함수: 다음 router로 이동할 수 있게 하는 함수.
  // 이 경우 /cats/som 의 router로 넘어간다.
  console.log("========================================");
  console.log("this is logging middleware for cats/som");
  console.log(req.rawHeaders[1]);
  console.log("========================================");
  next();
});

// 아래와 같은 구조를 router이라고 한다.
app.get("/", (req: express.Request, res: express.Response) => {
  console.log("router");
  res.send({ cats: Cat });
});

app.get("/cats/blue", (req: express.Request, res: express.Response) => {
  console.log("router");
  res.send({ blue: Cat[0] });
});

app.get("/cats/som", (req: express.Request, res: express.Response) => {
  console.log("router");
  res.send({ som: Cat[1] });
});

// middleware을 마지막에 배치하여 유효하지 않은 path에 대해 error를 처리할 수 있다.
app.use((req, res, next) => {
  console.log("========================================");
  console.log("middleware for handling error");
  console.log({ error: "404 not found" });
  console.log("========================================");
});

app.listen(8000, () => {
  console.log("server is On");
});

+ Recent posts