[node.js] Express 4.0에서 ‘확장’은 무엇을 의미합니까?
내 앱에서 express 및 body-parser를 사용하고 있습니다.
app.use(bodyParser.urlencoded({ extended: false }));
그러나 Express 4.0에서 ‘확장’이란 무엇을 의미합니까?
나는 이것을 찾았다
extended - parse extended syntax with the qs module.
그러나 나는 그것이 의미하는 바를 여전히 이해하지 못한다.
답변
경우 extended
입니다 false
, 당신은 “중첩 된 객체”를 게시 할 수 없습니다
person[name] = 'cw'
// Nested Object = { person: { name: cw } }
경우 extended
입니다 true
, 당신은 당신이 좋아하는 어떤 방법으로 할 수 있습니다.
답변
extended
속성이로 설정 되면true
URL로 인코딩 된 데이터가 qs 라이브러리 로 구문 분석됩니다 .
반대로
때
extended
속성에 설정false
의 URL 인코딩 된 데이터 대신으로 해석됩니다 쿼리 문자열 라이브러리 .
‘qs 라이브러리’와 ‘쿼리 스트링 라이브러리’를 사용한 파싱의 차이점
-
qs 라이브러리를 사용하면 쿼리 문자열에서 중첩 된 개체 를 만들 수 있습니다 .
var qs = require("qs") var result = qs.parse("person[name]=bobby&person[age]=3") console.log(result) // { person: { name: 'bobby', age: '3' } }
-
쿼리 문자열 라이브러리 는 쿼리 문자열에서 중첩 된 개체 만들기를 지원 하지 않습니다 .
var queryString = require("query-string") var result = queryString.parse("person[name]=bobby&person[age]=3") console.log(result) // { 'person[age]': '3', 'person[name]': 'bobby' }
-
qs 라이브러리는 ‘?’를 필터링 하지 않습니다. 쿼리 문자열에서.
var qs = require("qs") var result = qs.parse("?a=b") console.log(result) // { '?a': 'b' }
-
쿼리 문자열 라이브러리는 ‘?’를 필터링합니다. 쿼리 문자열에서.
var queryString = require("query-string") var result = queryString.parse("?a=b") console.log(result) // { a: 'b' }
app.use(bodyParser.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
자세한 내용은 Leonid Beschastny의 답변을 참조 하고 npm은 qs와 query-string을 비교합니다 .
답변
Body-Parser 문서에서 :
파싱 된 데이터를 포함하는 새 본문 개체는 미들웨어 (예 : req.body) 다음에 요청 개체에 채워집니다. 이 객체는 키-값 쌍을 포함합니다. 여기서 값은 문자열이나 배열 (extended가 false 인 경우) 또는 모든 유형 (extended가 true 인 경우) 일 수 있습니다.
과
확장 옵션을 사용하면 쿼리 문자열 라이브러리 (거짓 일 때) 또는 qs 라이브러리 (참일 때)를 사용하여 URL 인코딩 된 데이터를 구문 분석 할 수 있습니다. “확장”구문을 사용하면 리치 객체와 배열을 URL 인코딩 형식으로 인코딩 할 수 있으므로 URL 인코딩을 통해 JSON과 같은 경험을 할 수 있습니다. 자세한 내용은 qs 라이브러리를 참조하십시오.
기본적으로 확장하면 전체 개체를 구문 분석 할 수 있습니다.