새로 들어가는 프로젝트의 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`에 따라 결정된다.
- application/x-www-form-urlencoded
`URL encoded form`를 의미한다. enctype 을 설정하지않으면 default로 설정되는 값. - multipart/form-data
`Multipart/form-data`를 의미한다. 파일 업로드 할 때 주로 사용된다. - 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`
'Develop > Node' 카테고리의 다른 글
node-gyp rebuild fails during npm install canvas (0) | 2022.10.23 |
---|---|
[nestjs] How to return image from external API using NestJs? 정적 파일 제공 (1) | 2022.01.16 |
댓글