CodeIt

4주차

codingtori 2024. 7. 26. 01:33

미들웨어

: express에서 request와 response 사이에 위치하여 어떠한 작업을 수행하는 함수

 

파라미터 개수

- 2개 : req, res (일반적)

- 3개 : req, res, next

          next : 하나의 라우터에 여러 미들웨어가 사용되었을 때

- 4개: err, req, res, next

          err : 에러가 발생했을 때 처리를 담당하는 미들웨어

 

아규먼트로 넘겨준 순서가 미들웨어의 순서를 결정

하나의 엔드 포인트 = 'http 메소드 + 경로 + 미들웨어' 로 구성

 

 

all 메소드

: 동일한 경로에서 모든 http 메소드에 대한 리퀘스트를 미들웨어로 전달 → http 메소드에 관계 없이 동일한 수행을 앞서서 수행할 때 사용

 

app.use

http 메소드에 관계없이 모든 리퀘스트가 지정한 미들웨어를 거쳐가도록 함

해당 경로로 시작하는 모든 경로에 대응됨

첫번째 파라미터 생략가능 : 최상위 경로가 default, 모든 리퀘스트에 대해 항상 실행

 

☞ 하나의 리퀘스트가 여러 미들웨어를 지나가도록 되어있다면 여러 미들웨어에서 같은 req, res 객체 사용

     -- 객체이므로 원하는 값 추가 가능

 

 

에러 처리 : 에러 핸들러(=파라미터 4개 미들웨어)

실행되는 경우

① throw() 키워드로 에러 발생 시킬 때

② next() 메소드에 argument 넘겨 주었을 때

 

express에는 기본적인 에러 핸들러가 하나 있음

에러 핸들러도 미들웨어라서 아규먼트로 전달되는 순서가 중요 → 앞쪽의 미들웨어에서 발생한 에러를 뒤쪽의 에러핸들러가 처리 → 에러의 발생위치보다 뒤쪽에 정의해야함

 

 

내장 미들웨어

: express에 미리 포함되어 있는 미들웨어; 보통 모든 경로에 대한 req, res 대상으로 실행 (→ use 메소드에서 사용)

① express.json()

     : req.body에 담긴 json을 객체로 불러오기 위해 사용. Content-Type = ' application/json '

     req 객체에 값을 담는 역할을 하므로 값을 사용하는 미들웨어보다 앞쪽에 위치해야함

     실행결과로 함수 자체를 반환

② express.urlencoded()

    : Content-Type = ' application/x-www-form-urlencoded  ' 인 리퀘스트 처리위해 필요함

    이 미디어 타입은 주로 html의 입력 폼 통해서 서버로 data 전송시 사용

    키와 value로 구성된 리퀘스트 바디를 읽어와 리퀘스트 객체의 body 속성에 객체로 지정

    아규먼트 : extended (boolean값) → true 일 경우 복잡한 속성의 body-키 값을 읽을 수 있음

③ express.static()

    : 서버의 파일을 서버 외부로 전달하기 위해 사용

 

 

자주 사용되는 미들웨어

① cookie-parser

    : 리퀘스트로 전달 받은 쿠키를 쉽게 파싱할 수 있는 미들웨어

      쿠키의 값은 문자열(req객체의 headers속성에서 확인가능) → 이를 키와 값으로 분리

② morgan

    : 서버로 들어온 리퀘스트를 로그로 남기는 미들웨어

③ cors

    : 웹사이트가 다른 도메인에 있는 리소스에 접근할 수 있도록 브라우저에서  HTTP 헤더 통해 제어

④ Content-Type : multipart/form-data 인 리퀘스트

     입력폼 작성하고 전송할 때 다양한 타입의 데이터 전송을 가능하게 함

 

 

route() : 중복된 경로의 라우트를 묶어서 표현가능

app.route('중복된 경로')
    .http메소드1({
    })
    .http메소드2({
    })
    ...

 

Router 객체

여러 라우터를 묶어서 하나의 모듈로 만들고, 여러 모듈을 객체에 연결하는 방식으로 사용할 때 이용

express.Router();

 

 

라우터 레벨 미들웨어

: 묶인 라우터 별로 미들웨어 다르게 적용가능

 

 

파일 보내는 방법

① 파일을 텍스트로 인코딩하여 body에 추가

② multipart 타입사용

    : multipart/form-data :: 사용자의 입력 값을 하나로 묶기 위해서 사용 → 각각의 데이터 타입을 그대로 적용

      서버에서 이 데이터 타입을 받기 위해 'multer' 라이브러리 필요

    -- multer

        각각의 파일에 접근을 가능하게 하는 라우트를 만들어줌

        dest 옵션을 사용해 파일 저장 위치를 지정

        파일을 1개 받을 경우 single() 메소드 사용. 이 메소드는 미들웨어 자체를 반환

app.use(express.static('제공할 파일들이 있는 디렉토리(multer사용된것)'));

 

'CodeIt' 카테고리의 다른 글

자바스크립트 기본 다지기  (0) 2024.09.16
5주차  (0) 2024.08.05
데이터베이스 사용하기  (1) 2024.07.17
3주차  (0) 2024.07.13
또 봐도 새로운 git/github  (1) 2024.07.06