[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속성이로 설정 되면 trueURL로 인코딩 된 데이터가 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 라이브러리를 참조하십시오.

기본적으로 확장하면 전체 개체를 구문 분석 할 수 있습니다.

본문 파서 : 인코딩 된 URL


답변