서버/Express

ExpressJS middleware

realtrynna 2022. 1. 22. 20:01

ExpressJS middleware

Express는 middleware로 구성된다.

- 각 라우터별로 공통으로 실행하고 싶은 코드가 있을 시 사용

- app.use()로 장착

- 위에서 아래로 순서대로 실행됨

- middleware는 req res next가 매개변수인 함수

- req res 조작 가능

- next()로 다음 middleware로 넘어감

- app.set과의 차이 : app.set은 서버 내내 유지 req res는 요청 하는 동안만 유지

- req.body나 req.cookies같은 middleware의 데이터와 겹치지 않게 조심

- app.use가 middleware가 아니라 안에있는 req res next 함수가 middleware

- middleware를 app.use에 장착한거임

 

- middleware간 데이터 전달 가능(req.data 라우터 달라도 됨)
app.use((req, res, next) => {
	req.data = "middleware 데이터 전달"
}, (req, res, next) => {
	console.log(req.data);
});

 

next

concept : next를 호출해야 다음 코드로 넘어감

- next를 주석 처리하면 응답이 전송되지 않음

- 다음 middleware(route middleware)로 넘어가지 않음

- next(err) : error middleware

- netxt("route") : 다음 router

 

- if문으로 분기처리 가능
app.get("/", (req, res, next) => {
	if (true) {
    	console.log("2번 실행");
        next("route");
    }
}, (req, rex, next) => {
	res.send("1번 실행");
    next();
});

app.get("/", (req, res, next) => {
	res.send("2번 실행")
})

 

error middleware

concept : 모든 에러를 받을 수 있음

- err, req, res, next 매개변수가 4개

- err은 error에 관한 정보가 담김

- res.status(200) 메서드로 HTTP 상태 코드 지정 가능(default 200)

- 코드 가장 아래 위치

 

- error middleware
app.use((err, req, res, next) => {
    res.send("에러처리 미들웨어");
    console.error(err);
})