본문 바로가기
Develop/Node

express.urlencoded 가 뭐지?

by 3-stack 2022. 1. 16.

새로 들어가는 프로젝트의 API 서버 환경설정 중
`express.urlencoded` 옵션이 눈에 들어왔다.
초기에 한번 세팅해두고 무심하게 쓰던 옵션인데 확실히 알아보자.


1. express.urlencoded 란?

  • `urlencoded payload` 와 함께 들어오는 request를 파싱한다.
  • Content-Type 헤더가 `application/x-www-form-urlencoded` 옵션인 요청만 파싱한다.
  • 일치하는 Content-Type 헤가 없거나 / 분석할 body가 없거나 / 파싱오류인 경우
    빈 객체({})를 request object에 채운다.
  • body의 UTF-8 인코딩만 허용하고 gszip, deflate 인코딩의 자동확장을 지원한다.(옵션으로 끌 수 있다.)

 

2. express.urlencoded 옵션

 express.urlencoded({
  limit: '50mb',
  extended: false,
}),
  • 다양한 옵션이 있는데 화자는 2가지 옵션을 사용하고 있다.
  • limit : request body 의 maximum size를 설정한다. default 는 "100kb"라서 설정을 따로 했다.
    숫자인 경우 값은 바이트 수를 지정한다. 문자열이면 값이 구문 분석을 위해 바이트열 라이브러리로 전달된다.
  • extended
    • URL 인코딩된 데이터를 파싱하는 방법을 설정한다.
    • false인 경우 `querystring` 라이브러리 / true인 `qs` 경우 라이브러리 를 사용한다.
    • "확장" 구문(extended: true)을 사용하면 rich object 및 array을 URL 인코딩 형식으로 인코딩할 수 있으므로 URL 인코딩을 통해 JSON과 같은 경험을 할 수 있다. 자세한 내용은 `qs` 라이브러리 참조, StackOverFlow 참조

3. 그런데 urlencoded 란?

HTTP 통신할 때 데이터 인코딩하는 방식 중 하나이다.

인코딩 방식은 request 할 때, 사용하는 `enctype`에 따라 결정된다.

  1. application/x-www-form-urlencoded
    `URL encoded form`를 의미한다. enctype 을 설정하지않으면 default로 설정되는 값. 
  2. multipart/form-data
    `Multipart/form-data`를 의미한다. 파일 업로드 할 때 주로 사용된다.
  3. text/plain
    이름 그대로 인코딩 없는 단순 문자열임. HTML5에서 새로 도입된 타입임. 

 

4. [example] application/x-www-form-urlencoded 

<form action="/login" method="POST"
	enctype="application/x-www-form-urlencoded">
    <input type="text" name="username" value="superpower"/>
    <input type="text" name="password" value="password123"/>
    <input type="submit" value="Submit" />
</form>
  • `key1=value1&key2=value2` 방식으로 변환되어 요청됨.
  • 위의 경우,  `username=superpower&password=password123`

 

 

 

 

 

 

 

 

댓글