Hello, Android!

express에서의 라우팅과 미들웨어 본문

Node

express에서의 라우팅과 미들웨어

lwndnjs93 2021. 2. 8. 20:42

지금까지 웹 서버를 만들어보며 라우팅을 했을때 if문 범벅이었다

이러한 불편함을 해결하고 각종 편의 기능을 추가한 웹 서버 프레임워크 중에서

대표적으로 많이 사용되는 것이 익스프레스 이다

우선 npm install express로 익스프레스를 설치해야한다

 

지난번 RESTful서버 에서 만들었던 웹 서버를

익스프레스 버전으로 다시 만들었다

코드도 절반 조금 넘는 양으로 줄었고 무엇보다 if문이 사라졌다

익스프레스를 전혀 몰라도 느낌적인 느낌으로 알것같은 수준으로 변했다!!

우선 가장 먼저 익스프레스 객체를 만들었다 익스프레스 내부에 http모듈이 있기때문에

서버로 작동이 가능하다

 

app.set를 통해 서버에서 사용할 포트를

env파일에 포트 번호가 있으면 해당 번호를 사용하고

없으면 8080번 포트를 사용하게 지정했다

 

app.get("/friends", 콜백함수) 에서 get이 /friends일때의 작업을 만들었다

그리고 friends.json 파일을 넘겨주는데 res.sendFile 함수 하나로 모든것이 끝났다

res.sendFile(path, [option], [callback]) 함수는 path를 읽어 해당 내용을 클라이언트로 전송한다

path.join은 여러 인수를 넣으면 하나의 경로로 합쳐주고 __driname 은 해당 파일의 위치를 의미한다

즉 위 파일과 같은 위치에 있는 friends.json을 읽어 클라이언트로 전송한다

 

또한 주소 부분에는 정규표현식, : (콜론)을 사용한 와일드 카드도 적용이 가능하다

와일드 카드를 사용할때는 다른 라우터 보다 뒤에 적어주는 것이 좋다

 

- 미들웨어

미들웨어 함수는 요청, 응답 그리고 요청이 들어온 뒤 응답을 하기 전 그 사이에 엑세스 권한을 갖는 함수이다

라우터와 에러 핸들러 또한 미들웨어의 일종이기때문에 미들웨어가 익스프레스의 전부 라고 해도 과언이 아니다

미들웨어는 다음과 같은 작업을 수행할 수 있다

- 모든 코드를 실행

- 요청 및 응답 오브젝트에 대한 변경을 실행

- 요청 응답 주기를 종료

 - 스택 내의 다 다음 미들웨어를 호출

현재의 미들웨어 함수가 요청 응답 주기를 종료하지 않는 경우에는 next()를 호출해야한다

그렇지 않으면 클라이언트는 응답을 받지 못하고 계속 기다리게 된다

또한 미들웨어는 위에서 아래로 순섣로 실행이 되며 next를 실행하지 않으면 다음 미들웨어가 실행되지 않는다

 

app.use 를 사용하여 next() 가 있는 미들웨어 함수를 호출하는 것이 가능하다

이번에는 각종 에러상황을 위해 에러를 처리하는 미들웨어를 만들어 요청을 종료하도록 했다

 

expressjs.com/ko/guide/writing-middleware.html

'Node' 카테고리의 다른 글

body-parser, cookie-parser  (0) 2021.02.16
dotenv, morgan, static  (0) 2021.02.15
npm pakage.json  (0) 2021.02.08
클러스터  (0) 2021.02.06
쿠키와 세션  (0) 2021.02.05