[Node.js] 미들웨어 메모

김택주·2023년 1월 17일

Node

목록 보기
3/7

참조: https://lakelouise.tistory.com/211, https://morian-kim.tistory.com/3

미들웨어


HTTP 요청과 응답 중간에서 처리하는 함수
등록된 순서대로 미들웨어가 처리 됨
req, res, next 인자가 있는 함수는 미들웨어로 사용 가능

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, baseUrl, path


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')를 하여야
해당 라우터 미들웨어로 순서가 바로 변경됨

0개의 댓글