middleWare는 express에서 가장 중요한 개념중 하나이다. express는 http의 기본적인 모듈을 사용해서 웹 서비스를 만들 때 보다는 훨씬 빠르게 여러가지 작업을 할 수 있도록 많은 프리셋들을 제공한다. 주로 사용하는 작업들을 위한 많은 middleware가 제공되고 이것들을 잘 사용하기만 하면 여러 요청에 대해서 쉽게 대응을 할 수 있다. middleware가 어떻게 동작하는지 이해하는 것이 express를 이해하는 가장 첫 단계라고 할 수 있다.
middleware는 express가 실행되면서 request가 들어왔을 때 해당 request가 응답되어 나갈 때 까지 거치는 모든 함수를 뜻한다고 생각하면 된다.
const express = require('express')
const app = express() // 앱 생성
const PORT = 5000
app.use(
'/',
(req, res, next) => {
console.log('Middleware 1')
setTimeout(() => {
next() // 1초 뒤 next 호출
}, 1000)
},
(req, res, next) => {
console.log('Middleware 1-2')
next()
}
)
app.use((req, res) => {
console.log('Middleware2')
res.send('Hello, express!')
})
// 포트 설정
app.listen(PORT, () => {
console.log(`The Express server is listening at port: ${PORT}`)
})
여기서 호출되는 함수들을 middleware라고 볼 수 있다.
middleware는 순차적으로 실행되기 때문에 다음 middleware로 넘겨주기 위해서는
next()를 호출하여 넘겨주어야 한다.
middleware에서는 연속된 함수 사이에서 앞선 함수의 결과를 넘겨주는 경우가 자주 발생하는데
const express = require('express')
const app = express() // 앱 생성
const PORT = 5000
app.use('/', (req, res, next) => {
const requestedAt = new Date() // 요청이 발생한 시점
console.log('Middleware 1')
req.requestedAt = requestedAt // req 객체를 이용해 값을 넘겨줌
next()
})
app.use((req, res) => {
console.log('Middleware2')
res.send(`Hello, express! : at ${req.requestedAt} `)
})
// 포트 설정
app.listen(PORT, () => {
console.log(`The Express server is listening at port: ${PORT}`)
})
req 객체를 사용하면 다음 middleware에 원하는 값을 넘겨주는 것도 가능하다.
이 예제에서는 요청이 발생한 시점을 req 객체를 사용해서 넘겨주었다.