프로젝트 소개

qs는 중첩 객체, 배열 및 다양한 형식 옵션을 지원하며 쿼리 문자열을 파싱하고 직렬화하는 데 널리 사용되는 JavaScript 라이브러리입니다. 원래 TJ Holowaychuk이 만들었고 현재 Jordan Harband가 유지 관리하며, 웹 애플리케이션과 API에서 흔히 접하는 URL 쿼리 매개변수를 견고하게 처리합니다. 이 라이브러리의 핵심 기능은 두 가지 주요 작업에 집중됩니다. 쿼리 문자열을 JavaScript 객체로 파싱하는 것과 객체를 다시 쿼리 문자열로 문자열화하는 것입니다. 파은 대괄호 표기법을 사용한 중첩 객체 구조를 지원하며(예: 'foo[bar]=baz'는 { foo: { bar: 'baz' } }가 됨), 깊게 중첩된 입력으로 인한 악용을 방지하기 위해 설정 가능한 깊이 제한(기본 5단계)이 있습니다. 배열은 대괄호 표기법('a[]=b&a[]=c') 또는 인덱스 표기법('a[0]=b&a[1]=c')으로 파싱할 수 있으며, 희소 배열의 자동 축과 설정 가능한 배열 제한(기본 20개 요소)을 지원합니다. 보안 기능은 qs에 두드러지게 내장되어 있습니다. 이 라이브러리는 신뢰할 수 없는 입력을 파싱할 때 발생할 수 있는 악용을 완화하기 위해 깊이 제한, 매개변수 제한(기본 1000), 배열 제한을 적용합니다. strictDepth 옵션은 이 제한을 초과할 때 오류를 발생시킬 수 있으며, throwOnLimitExceeded는 모든 제한 위반에 대해 설명적인 오류를 제공합니다. 프로토타입 오염 보호는 plainObjects 옵션(null 프로토타입 객체 생성) 또는 allowPrototypes(주의해서 사용해야 함)를 통해 처리됩니다. 또한 이 라이브러리는 레거시 인코딩 시나리오를 처리하기 위해 charsetSentinel을 통한 문자셋 감지를 지원합니다. 설정 션은 구분자 사용자 정의(문자열 또는 정규식), 점 표기법 지원(allowDots), 쉼표로 구분된 배열 파싱, 중복 키 처리 전략(combine, first, last), 다양한 인코딩/디코딩 사용자 정의를 포함하여 광범위합니다. stringify 함수는 여러 배열 형식(indices, brackets, repeat, comma), 사용자 정의 인코더/디코더, 날짜 직렬화, 키 정렬 및 필터링을 지원합니다. encodeValuesOnly, addQueryPrefix, allowEmptyArrays와 같은 옵션은 출력 형식에 대한 세밀한 제어를 제공합니다. 이 라이브러리는 Node.js 환경에서 사용하도록 설계되었으며, 요청 쿼리 매개변수를 처리하기 위해 Express와 같은 웹 프레임워크에 일반적으로 통합됩니다. 포괄적인 기능 세트, 보안 고려 사항 및 광범위한 문서는 프로덕션 애플리케이션에서 쿼리 문자열 처리를 위한 신뢰할 수 있는 선택으로 만들어 줍니다.