미들웨어는 익스프레스의 핵심이며, 요청과 응답의 중간(middle)에 위치하기 때문에 미들웨어(middleware)라고 부릅니다.
미들웨어는 요청과 응답을 조작해 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 합니다.
app.use와 함께 사용됩니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | const express = require("express"); const path = require("path"); const app = express(); app.set("port", process.env.PORT || 3000); app.use((req, res, next) => { console.log("모든 요청에 다 실행됩니다."); next(); }); app.get( "/", (req, res, next) => { console.log("GET / 요청에서만 실행됩니다."); next(); }, (req, res) => { throw new Error("에러는 에러 처리 미들웨어로 갑니다."); } ); app.use((err, req, res, next) => { console.error(err); res.status(500).send(err.message); }); app.listen(app.get("port"), () => { console.log(app.get("port"), "번 포트에서 대기 중"); }); | cs |
next
다음 미들웨어로 넘어가는 함수입니다.
주소를 첫번째 인수로 넣어주지 않는다면 미들웨어는 모든 오청에서 실행됩니다.
주소를 첫번째 인수로 넣어준다면 해당하는 요청에서만 실행됩니다.
1 | npm i morgan cookie-parser express-session dotenv | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | const express = require("express"); const morgan = require("morgan"); const cookieParser = require("cookie-parser"); const session = require("express-session"); const dotenv = require("dotenv"); const path = require("path"); dotenv.config(); const app = express(); app.set("port", process.env.PORT || 3000); app.use(morgan("dev")); app.use("/", express.static(path.join(__dirname, "public"))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, name: "session-cookie", }) ); app.use((req, res, next) => { console.log("모든 요청에 다 실행됩니다."); next(); }); app.get( "/", (req, res, next) => { console.log("GET / 요청에서만 실행됩니다."); next(); }, (req, res) => { throw new Error("에러는 에러 처리 미들웨어로 갑니다."); } ); app.use((err, req, res, next) => { console.error(err); res.status(500).send(err.message); }); app.listen(app.get("port"), () => { console.log(app.get("port"), "번 포트에서 대기 중"); }); | cs |
dotenv
env 파일을 읽어서 process.env로 만듭니다.
morgan
콘솔 맨 아래 로그는 morgan 미들웨어에서 나오는 것입니다.
요청과 응답에 대한 정보를 기록합니다.
app.use(morgan("dev"));
개발 환경에선 dev, 배포 환경에서는 combined를 애용합니다.
static
body-parser
1 2 | app.use(express.json()); app.use(express.urlencoded({ extended: false })); | cs |
cookie-parser
요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만듭니다.
name=sojeong -> { name: 'sojeong'}
express-session
세션 관리용 미들웨어입니다.
로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장해둘 때 유용합니다.