gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • GithubActions
  • Spring
  • docker
  • 깃헙액션
  • nest
  • github
  • JSON
  • AWS
  • SlackAPI
  • nodejs
  • 슬랙알림
  • 스프링부트
  • 네스트
  • 스프링
  • oauth2
  • OAuth
  • 도커
  • nestjs
  • JWT
  • springboot

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

📡 백엔드/⭐ Node.js

[Nodejs] 미들웨어의 사용과 자주 쓰이는 미들웨어

2022. 5. 16. 01:12

✅ 미들웨어(middleware)

request와 response 사이에 위치하여 미들웨어(middleware)라고 불린다

 

 

✅ 미들웨어의 사용 예시

app.use(미들웨어) 모든 경로 요청에서 미들웨어 사용
app.use('/abc', 미들웨어) abc로 시작하는 모든 요청에서 미들웨어 사용
app.post('/abc', 미들웨어) abc로 시작하는 POST 요청에서 미들웨어 사용

app.use 나 app.get 같은 라우터에 미들웨어를 여러 개 장착 가능하다

 

라우터 끝단에서 반드시 next 함수를 호출해야 다음 미들웨어를 실행할 수 있다

(보통 미들웨어는 내부적으로 next 함수를 호출하기에 따로 적어줄 필요는 없다)

 

미들웨어는 동시에 여러개를 장착할 수도 있다

 

 

✅ 실무에서 자주 사용하는 패키지

✔ morgan

request와 response에 대한 정보를 콘솔에 기록하는 미들웨어

 

  • 설치

npm install morgan

 

  • 미들웨어 사용
const morgan = require('morgan');
app.use(morgan('dev'));

인수로 dev, combined, common, short, tiny 사용 가능
개발 환경에서는 dev, 배포 환경에서는 combined 를 자주 사용한다

[HTTP 메소드] [주소] [Status 코드] [응답속도]-[응답바이트] 순서대로 출력된다

 

 

✔ static

정적 파일을 제공하는 라우터 역할의 미들웨어

기본으로 제공되기에 따로 설치할 필요는 없다

 

  • 미들웨어 사용
//app.use('요청 경로', express.static('실제 경로'));
app.use('/', express.static(path.join(__dirname, '/src/index.html')));

 

✔ body-parser

request의 본문에 있는 데이터를 해석해 req.body 객체로 만들어주는 미들웨어

보통 Form 데이터나 AJAX 요청 데이터를 처리할 때 사용한다

(이미지, 동영상, 파일은 처리할 수 없고 이 형식은 multer 모듈을 사용해야 한다)

 

  • 미들웨어 사용
app.use(express.json());
app.use(express.urlencoded({extended: false}));

express 4.16.0 버전부터 express에 내장되어 있으나
raw, text 형식 데이터는 body-parser을 설치해야 한다

 

  • json 형식

{ name: 'gengminy', field: 'backend' }

 

  • url-encoded 형식

name=gengminy&field=backend

 

url-encoded 에서

{ extend : true } - qs 모듈 사용 (npm 패키지 설치 필요)
{ extend : false } - 노드 내장 querystring 모듈 사용

body-parser는 이 둘을 모두 JSON 형식으로 req.body 에 추가해준다

 

 

✔ cookie-parser

request에 동봉된 쿠키를 해석해 req.cookies 객체로 만드는 미들웨어

 

  • 미들웨어 사용
app.use(cookieParser(비밀키));

name=gengminy 라는 쿠키를 보내면

req.cookies는 { name : 'gengminy' } 로 해석해준다

cookieParser 의 첫 번째 인수로 비밀키를 넣으면

비밀 키를 통해 만든 서명을 쿠키 값 뒤에 붙여준다

 

✔ express-session

세션 관리용 미들웨어

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

사용자별로 req.session 객체 안에 유지된다

app.use(session({
    resave: false,
    saveUninitialized: false,
    secret: process.env.COOKIE_SECRET,
    cookie: {
        httpOnly: true,
        secure: false,
    },
    name: 'session-cookie',
}));

인수로 세션에 대한 설정을 받는다

 

resave : 세션에 대한 수정 사항이 생기지 않더라도 다시 저장할 것인지 설정

saveUninitialized : 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지 설정

secret : 안전하게 쿠키를 전송하기 위한 서명 값, cookie-parser의 비밀값과 같게 하는 것이 좋음

name : 세션 쿠키의 이름 (기본 값 connect.sid)

cookie : 세션 쿠키에 대한 설정

 

 

✅ 미들웨어 안에 미들웨어 중첩

기존 미들웨어의 기능을 확장할 수 있는 테크닉

app.use((req, res, next)=>{
    if (process.env.NODE_INV === 'production'){
        morgan('combined')(req, res, next);
    } else {
        morgan('dev')(req, res, next);
    }
});

조건에 따라 미들웨어를 분기 처리 할 수도 있다

 

 

✅ 에러 처리 미들웨어

app.use((err, req, res, next)=>{
    console.error(err);
    res.status(500).send(err.message);
});

에러처리 미들웨어는 매개변수가 반드시 네 개여야 한다

특별한 경우가 아니면 가장 아래에 위치하도록 하여야 한다

 

저작자표시 (새창열림)

'📡 백엔드 > ⭐ Node.js' 카테고리의 다른 글

[Nodejs] Sequelize 로 SQL 데이터베이스 연동하기  (0) 2022.05.21
[Nodejs] Router 객체로 라우팅 파일 분리  (0) 2022.05.17
[Nodejs] express 서버 열기  (0) 2022.05.15
[Nodejs] 쿠키와 세션  (2) 2022.05.15
[Nodejs] http 모듈로 간단한 REST API 사용  (0) 2022.05.15
    '📡 백엔드/⭐ Node.js' 카테고리의 다른 글
    • [Nodejs] Sequelize 로 SQL 데이터베이스 연동하기
    • [Nodejs] Router 객체로 라우팅 파일 분리
    • [Nodejs] express 서버 열기
    • [Nodejs] 쿠키와 세션
    gengminy
    gengminy
    코딩

    티스토리툴바