자주 사용되고 유용한 핵심 미들웨어 몇가지를 알아보자.
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가 올바르게 읽혀진다.
요청마다 로그를 남길 수 있다. 어떤 요청을 받았고 얼마나 걸렸는지 다양한 정보를 확인할 수 있다.
응답에 공통적으로 필요한 보안 헤더를 자동으로 세팅해준다.
일일이 보안과 관련데 헤더를 찾아서 직접 등록하지 않아도 helmet이 자동으로 넣어준다.
CORS정책과 관련된 헤더를 자동으로 혹은 편하게 세팅할 수 있다.
CORS가 무언인지 궁금하면 이전 블로그 포스팅을 확인해보자.
프로미스로 동작하는 비동기 로직이 있는 미들웨어에서 에러가 발생하면 가장 마지막 미들웨어에서 에러를 감지하지 못한다.
이유는 프로미스를 다음 미들웨어로 넘기지 못하기 때문이다.
import 'express-async-errors';
만 작성해주면 프로미스가 다음 미들웨어로 넘어갈 수 있고 에러처리를 하는 미들웨어에서 캐치가 가능하다.