미들웨어는 익스프레스의 핵심 요소이다.
미들웨어
요청와 응답의 중간(middle)에 위치해 미들웨어라고 일컫는다. 미들웨어는 요청과 응답을 조작해 기능을 추가하기도 하고, 나쁜 요청을 걸러내는 일 또한 수행한다.
미들웨어는 app.use와 함께 사용한다.
대표적으로 자주 사용하는 미들웨어의 종류와 쓰임에 대해서 알아보자.
요청과 응답에 대한 정보를 콘솔에 기록한다.
인수로 dev 외에 combined, common, short, tiny 등을 넣을 수 있다.
정적인 파일들을 제공하는 라우터 역할을 한다. 기본저긍로 제공되기에 따로 설치할 필요 없이 express 객체 안에서 꺼내 장착하면 된다.
app.use('/', express.static(path.join(__dirname, 'public'));
정적파일들을 알아서 제공해준다. 만약 요청 경로에 해당하는 파일이 없으면 알아서 내부적으로 next를 호출한다.
요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어주는 미들웨어이다. 보통 폼 데이터나 AJAX 요청의 데이터를 처리한다. 단, 멀티파트(이미지, 동영상, 파일) 데이터는 처리하지 못한다. 이것을 처리하고 싶다면 multer 모듈을 사용하면 된다.
app.use(express.json());
app.use(express.urlencoded({ extended: false });
cookie-parser는 요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만든다.
// app.js
app.use(cookieParser(비밀키));
해석된 쿠키들은 req.cookies 객체에 들어간다.
cookie-parser
가 쿠키를 생성할 때 쓰이는 것은 아니다. 쿠키를 생성/제저하기 위해서는 res.cookie, res.clearCookie 메서드를 사용해야한다. res.cookie(키, 값, 옵션)
형식으로 사용한다.
res.cookie('name', 'hodoopapa', {
expires: new Date(Date.now() + 900000),
httpOnly: true,
secure: true,
});
res.clearCookie('name', 'hodoopapa', { httpOnly: true, secure: true });
세션 관리용 미들웨어이다. 로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장해둘 때 매우 유용하다. 세션은 사용자별로 req.session 객체안에 유지된다.
app.use(session({
resave: false,
seveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
express-session
은 세션 관리 시 클라잉너트에 쿠키를 보낸다.Node.js 교과서(조현영 저)