const logger = (req,res,next) =>{}
req,res,next를 인자로 갖는 함수를 작성하면 미들웨어가 된다.
next를 호출하지 않으면 미들웨어 사이클이 멈춘다.
어플리케이션 미들웨어
app의 use 나 http method 함수를 이용하여 미들웨어를 연결할 수 있다.
http 요청이 들어온 순간부터 적용된 순서대로 동작한다.
라우터 미들웨어
router 객체에 미들웨어가 적용되는 것
특정 경로의 라우팅에만 미들웨어를 적용함
app 객체에 라우터가 적용된 순서대로 동작한다. (app이 먼저임)
미들웨어 서브 스택
use, http method 함수에 여러 미들웨어를 동시에 적용할 수 있다.
한 개의 경로에 특정해 미들웨어를 적용하기 위함
인자의 순서대로 동작함
오류 처리 미들웨어
마지막 위치에 만들어져 오류를 핸들링한다.
err,req,res,next 네가지 인자를 가지고, 앞선 미들웨어에서 next 함수에 인자가 전달되면 실행된다.
함수형 미들웨어
하나의 미들웨어를 작성하고, 작동 모드를 선택해 사용하고 싶을 경우 함수형으로 작성한다.
미들웨어 함수를 반환하는 형식으로 함수 실행시 미들웨어 동작이 결정됨.
동일한 로직에 설정값만 다르게 해 미들웨어를 사용하고 싶을 경우에 활용되낟.
const auth = (type) =>(req,res)=>{}
다양한 것이 이미 만들어져 라이브러리로 제공된다.
npm으로 설치 가능하다. ex) cors, multer, passport
REST 아키텍쳐를 준수하는 웹 API
Restful API
#️⃣ 사용법
기본 동작 : HTTP Method 사용 + 명사형 URL
URL 표현법 : 자원은 복수형, 하나의 자원에 대한 접근은 아이디 ⇒ /posts/1
계층적 자원 : 자원을 계층적으로 표현 ⇒ /users/1/posts
JavaScript Object Notation
#️⃣ 사용법
{key:value}
로 표현한다. value는 어떤 값이라도 사용할 수 있다.웹 서비스의 가장 대표적인 프로젝트 구성 패턴
기능들을 어떻게 분리할지에 대한 하나의 구성 방법
Model - View - Controller로 구분하여 구조를 구성한다.
Model → models
데이터에 접근하는 기능, 데이터 그 자체
데이터의 읽기, 쓰기는 Model을 통해서만 가능하다.
View
데이터를 표현하는 기능
Controller에 의해 데이터를 전달받고, 들어온 데이터를 화면에 표시하는 기능을 담당한다.
Controller → routes
Model을 통해 데이터에 접근하여 처리 결과를 View로 전달하는 기능
라우팅 함수가 해당 기능을 수행한다.
→ 모듈화로 MVC 패턴을 구현할 수 있다.
⭐️ express.js는 JSON 데이터를 처리하지 못한다. 그래서 JSON을 처리하려면 app.use(express.json())이 필요하다