TIL

23/11/05 TIL __ app.use(express.urlencoded({extended: true}));

GABOJOK 2023. 11. 5. 17:40

 

 

 

오늘은 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

 

[NodeJs] express.json()과 express.urlencoded()의 차이점 알아보기

1️⃣ 사용이유 (1) .json()과 .urlencoded()를 사용하지 않을 때

kirkim.github.io