오늘은 node로 서버를 만들때 사용하는
app.use(express.urlencoded({extended:true}))
가 무엇인지 알아보려고 한다.
일단 사용하라고 해서 사용했는데,
이게 어떤 역할을 하는건지 모르고 있어서 찾아보고 정리하게 되었다.
🚗 body-parser 미들웨어 란?
- 본문에 있는 데이터를 해석해서 req.body 객체로 만들어 주는 미들웨어.
- 보통 form 데이터 혹은 ajax 요청의 데이터를 처리한다.
- 이전에는 따로 설치했지만, express 설치하면 내장되기 때문에 따로 설치 안해도 된다.
생김새는 이렇다.
app.use(express.json()); //json 파일을 변환
app.use(express.urlencoded({extended:true})); //url에 있는 값을 변환.
app.use(express.json()) 은 제이슨 파일을 변환해 주는 역할을 한다.
그렇다면 app.use(express.urlencoded({extended:true})); 는 어떤 역할을 할까?
🤠 app.use(express.urlencoded({extended:true}));
- 주소 형식으로 데이터를 보낼때 URL-encoded 방식을 사용한다.
- 주로 폼 전송이 URL-encoded 방식을 사용한다.
- 폼으로 제출되는 값은 content-type이 x-www-from-urlencoded 형태며 express.json() 으로 값을 해석할 수 없다.
- extended:false 는 기본 내장된 querystring 모듈을 사용해서 쿼리스트링을 해석한다는 의미이다.
- extended:true 는 qs 모듈을 사용해 쿼리스트링을 해석한다는 의미이다.
- (qs 모듈은 쿼리스트링 모듈의 기능을 좀더 확장한 모듈이며, express 에 포함되어 설치된다)
- false로 해서 기본 내장 쿼리스트링 모듈을 사용 [Object:null prototype] {sample:"hi"}
- true 로 해서 qs 모듈을 사용 {sample:"hi"}
- 이처럼 출력형태가 다를뿐 두가지 모두 정상적으로 출력된다.
👻 예를 들어보자.
만약 json 형식으로 {name : "빌리", age : 2} 이런 데이터를 전송한다면?
app.use(express.json()) 덕분에 req.body로 잘 들어올 수 있게 된다.
만약 URL-encoded 형식으로 name=billy&age=2 이런 데이터를 전송한다면?
app.use(express.urlencoded({extended:true})) 덕분에 req.body 로 잘 들어올 수 있게 된다.
{name : "빌리", age : 2} 이런 형식으로 말이다.
참고한 책 _ node.js 교과서 개정3판
참고한 블로그
https://kirkim.github.io/javascript/2021/10/16/body_parser.html
'TIL' 카테고리의 다른 글
23/11/07 TIL __ 쿠키와 세션 (0) | 2023.11.07 |
---|---|
23/11/06 TIL __ 포트를 죽여도 계속 살아나요(address already in use) (1) | 2023.11.06 |
23/11/04 TIL __ AWS 배포하기 총정리2 (0) | 2023.11.04 |
23/11/03 TIL __ mongodb 아틀라스 db.collection 안되는 이유 ... (1) | 2023.11.03 |
23/11/02 TIL __ AWS 배포하기 총정리 (1) | 2023.11.02 |