유용한 express 미들웨어

younoah·2022년 1월 31일
0

[nodeJS]

목록 보기
12/15

자주 사용되고 유용한 핵심 미들웨어 몇가지를 알아보자.

내부 미들웨어

import express from 'express';

app.use(express.json()); // REST API -> Body를 파싱
app.use(express.urlencoded({ extended: false})); // HTML Form -> Body를 파싱

const options = {
  dotfiles: 'ignore',
  etag: false,
  index; false,
  maxAge: '1d',
  redirect: false,
  setHeaders: (res, path, stat) => {
    res.set('x-timestamp', Date.now());
  }
}
app.use(express.static('public', options)); // static 파일을 클라이언트가 읽어 갈 수 있게 설정

express.json()

REST API로 통신을 할 때 Body의 Json 데이터를 파싱한다.


express.urlencoded()

HTML Form Submit으로 제출된 Body의 데이터를 파싱한다.


espress.static('static 폴더 경로')

지정한 경로에 위치한 static 데이터를 클라이언트가 읽어 갈 수 있게 설정한다.

호스트/index.html, 호스트/image.png 와 같은 요청을 하게 되면 지정한 static 폴더의 경로안에서 해당 파일을 반환해준다. 이외에 옵션을 줄수있다. (공식문서 참고)



외부 미들웨어

우선 아래 3가지 미들웨어를 설치하자.

$ npm i cookie-parser morgan helmet cors
import express from 'express';
import cookieParser from 'cookie-parser';
import morgan from 'morgan';
import helmet from 'helmet';
import cors from 'cors';
import 'express-async-errors'; // 프로미스를 다음 미들웨어에 넘기기

app.use(cookieParser()); // 쿠키를 파싱한다. 이 작업을 해야 req.cookies가 올바르게 읽혀진다.
app.use(morgan('combine')); // 요청마다 로그를 남겨준다.
app.use(helem()); // 응답에 공통적으로 필요한 보안 헤더를 자동으로 세팅해준다.
app.use(cors({
  orgin: ['https:127.0.0.1:5500'],
  optionsSuccessStatus: 200,
  credentionals: true, // Acess-Control-Allow-Credentials: true 설정
}));

app.get('/', (req, res) => {
  console.log(req.cookies);
});

쿠키를 파싱한다. 이 작업을 해야 req.cookies가 올바르게 읽혀진다.


morgan

요청마다 로그를 남길 수 있다. 어떤 요청을 받았고 얼마나 걸렸는지 다양한 정보를 확인할 수 있다.

(morgan 깃헙)


helem

응답에 공통적으로 필요한 보안 헤더를 자동으로 세팅해준다.

일일이 보안과 관련데 헤더를 찾아서 직접 등록하지 않아도 helmet이 자동으로 넣어준다.

(helmet 공식문서)


cors

CORS정책과 관련된 헤더를 자동으로 혹은 편하게 세팅할 수 있다.

CORS가 무언인지 궁금하면 이전 블로그 포스팅을 확인해보자.


express-async-errors

프로미스로 동작하는 비동기 로직이 있는 미들웨어에서 에러가 발생하면 가장 마지막 미들웨어에서 에러를 감지하지 못한다.

이유는 프로미스를 다음 미들웨어로 넘기지 못하기 때문이다.
import 'express-async-errors'; 만 작성해주면 프로미스가 다음 미들웨어로 넘어갈 수 있고 에러처리를 하는 미들웨어에서 캐치가 가능하다.

profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글