참조: https://lakelouise.tistory.com/211, https://morian-kim.tistory.com/3
HTTP 요청과 응답 중간에서 처리하는 함수
등록된 순서대로 미들웨어가 처리 됨
req, res, next 인자가 있는 함수는 미들웨어로 사용 가능
req : HTTP 요청 객체
res : HTTP 응답 객체
next : 다음 미들웨어 실행 함수
app.use(cookieParser())
app.use(userRouter);
HTTP 요청이 들어오면 실행됨
첫번째 인자로 미들웨어 함수만 넣을 시 모든 요청에 대한 반영
app.use('/', cookieParser());
첫번째 인자로 경로를 넣어주고 뒤에 미들웨어 함수를 넣으면 해당 요청에만 반영
공통적인 기능 처리가 필요할때 사용
router.use(cookieParser());
app.use('/user', userRouter);
라우터에 미들웨어를 함수를 추가
애플리케이션 미들웨어 동작이 다 된후 동작
특정 라우팅에만 기능을 추가하고싶을경우 사용
애플리케이션 -> 라우터 순으로 반영
가장 마지막에 실행되는 미들웨어
오류 미들웨어의 next 인자에 값이 들어올경우 실행
타 미들웨어에서 next(new Exception()) 다음과 같이 실행될꺼같음
미들웨어를 특정 로직에 따라 분기처리가 필요할 경우 사용

출처 : https://morian-kim.tistory.com/3
originUrl : 클라이언트에서 입력한 url ex) /users1/users2
baseUrl : 애플리케이션 url ex) /users1
path : 라우터 url ex) /users2
애플리케이션 미들웨어는 originUrl 과 매치되어야 실행되며
라우터 미들웨어는 path와 매치되어야 실행됨
app.use('/', (req, res, next) => {
}, (req, res, next) => {
})
하나의 경로에 여러 미들웨어 등록 가능
등록된 순서대로 동작
app.use('/', (req, res, next) => {
next('route')
})
애플리케이션 미들웨어에서는 next('route')를 하여도 순서가 바로 변경되지않음
router.get('/user', (req, res, next) => {
next('route')
})
라우터 메소드 함수 호출 시 next('route')를 하여야
해당 라우터 미들웨어로 순서가 바로 변경됨