프로그래밍/Node.js

[Node.js 강의 시리즈] 20강 - 미들웨어

월횽 2024. 7. 19. 06:30
728x90
반응형
SMALL

미들웨어의 개념과 사용법을 이해하고, Express에서 내장 미들웨어와 사용자 정의 미들웨어를 활용하는 방법을 익힌다.

 

1. 미들웨어의 개념과 사용법

 

미들웨어란?

· 미들웨어는 요청(request)과 응답(response) 사이에 실행되는 함수이다.
· 미들웨어는 요청 객체(req), 응답 객체(res), 그리고 다음 미들웨어 함수를 호출하기 위한 next 함수를 인자로 받는다.

728x90

미들웨어의 역할

· 요청 및 응답을 가로채서 다양한 작업을 수행할 수 있다.
· 예를 들어, 로그 기록, 사용자 인증, 요청 데이터 검증, 오류 처리 등을 할 수 있다.

미들웨어 사용법

· app.use() 메서드를 사용하여 미들웨어를 등록할 수 있다.

const express = require('express');
const app = express();
const port = 3000;

// 미들웨어 함수 정의
const logger = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 다음 미들웨어로 이동
};

// 미들웨어 등록
app.use(logger);

app.get('/', (req, res) => {
  res.send('Hello, Express with Middleware!');
});

app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

 

 

 

2. 내장 미들웨어와 사용자 정의 미들웨어

반응형

내장 미들웨어

· Express는 여러 내장 미들웨어를 제공하여 다양한 작업을 쉽게 수행할 수 있다.
· 예를 들어, express.json()은 JSON 요청 바디를 파싱하는 미들웨어이다.

// 내장 미들웨어 사용 예제
app.use(express.json()); // JSON 요청 바디 파싱

 

 

사용자 정의 미들웨어

· 사용자 정의 미들웨어는 애플리케이션의 요구사항에 맞게 직접 작성할 수 있다.
· 예를 들어, 요청 시간을 기록하는 미들웨어를 작성해보자.

// 사용자 정의 미들웨어
const requestTime = (req, res, next) => {
  req.requestTime = Date.now();
  next();
};

// 미들웨어 등록
app.use(requestTime);

app.get('/', (req, res) => {
  res.send(`Current Time: ${req.requestTime}`);
});

 

 

3. 다양한 미들웨어 사용 예제

SMALL

예제: 요청 로깅 미들웨어

· 모든 요청에 대해 요청 메서드와 URL을 로그로 기록하는 미들웨어를 작성해보자.

const logger = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
};

app.use(logger);

 

 

예제: 오류 처리 미들웨어

· 오류 처리 미들웨어는 네 개의 인자(err, req, res, next)를 사용하여 오류를 처리할 수 있다.

const errorHandler = (err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
};

app.use(errorHandler);

 

 

예제: 인증 미들웨어

· 간단한 인증 미들웨어를 작성하여 특정 경로에 대한 접근을 제한해보자.

const auth = (req, res, next) => {
  const authHeader = req.headers.authorization;
  if (authHeader === 'Bearer mysecrettoken') {
    next(); // 인증 성공
  } else {
    res.status(403).send('Forbidden');
  }
};

app.get('/protected', auth, (req, res) => {
  res.send('This is a protected route.');
});

 

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST