Express Middleware concept

middleware 는 request, response 의 중간에 위치하며, requst,response에 필요한 작업을 수행한다. router,error handler 모두 middleware의 일종이다.

  • syntax

middleware 는 app.use(middleware) 형태로 실행된다.

middleware 의 parameter는 req,res,next이다.

express는 middleware를 위에서 아래로 순차적으로 실행하면서, 요청 url에 맞는 middleware를 실행하고 ,

next() 호출시 다음 middleware로 요청이 넘어간다.
만약 next() 호출되지 않으면 다음 middleware로 요청이 넘어가지 않는다.

1
2
3
4
5
//  기본 middleware 사용법 
app.use((req,res,next)=>{
console.log("router exectued!");
next();
})

위 middleware는 모든 요청에 대해 호출되는 middleware이고
특정 url에 대해 수행되는 middleware는 다음과 같이 수행될 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// GET,POST 
app.use("/request-url",(req,res,next)=>{
console.log("router exectued!");
next();
})
// POST
app.post("/request-url",(req,res,next)=>{
console.log("router exectued!");
next();
})
// GET
app.get("/request-url",(req,res,next)=>{
console.log("router exectued!");
next();
})

또한 하나의 요청 url에서 여러개의 router 수행이 가능하다 예를 들면 아래와 같이 호출하면 final_router 호출전에 router1,2의 로직을 수행된다. (주로 로그인여부확인 로직이 들어간다.)

1
2
3
4
// multiple router example
// router1 contain next();
// router2 contain next();
app.get("/multiple-routers",router1,router2,final_router);

보통 모든 middleware에서 요청 url을 찾을 수 없을떄를 대비하기 위해, 가장 아래 middleware에 error handling 용 middleware를 두어 처리한다.

1
2
3
4
5
6

app.use((err,req,res,next)=>{
console.log(`${err} occured !`);
// error 처리 로직
res.send(404)
})

Comments