web-dev-qa-db-ja.com

Express 4.0で「拡張」とはどういう意味ですか?

私はアプリでエクスプレスパーサーとボディパーサーを使用しています。

app.use(bodyParser.urlencoded({ extended: false }));

しかし、Express 4.0では「拡張」とはどういう意味ですか?

私はこれを見つけました

extended - parse extended syntax with the qs module.

しかし、私はまだそれが何を意味するのか理解できません。

62
KimCrab

extendedfalseの場合、「ネストされたオブジェクト」を投稿できません

person[name] = 'cw'

// Nested Object = { person: { name: cw } }

extendedtrueの場合、好きな方法で実行できます。

115
Wayne Chiu

extendedプロパティがtrueに設定されている場合、URLエンコードされたデータは qsライブラリ

それどころか、

extendedプロパティがfalseに設定されている場合、URLエンコードされたデータは代わりに クエリ文字列ライブラリ


「qsライブラリ」と「クエリ文字列ライブラリ」による解析の違い

  • qsライブラリを使用すると、クエリ文字列からnestedオブジェクトを作成できます。

    var qs = require("qs")
    var result = qs.parse("person[name]=bobby&person[age]=3")
    console.log(result) // { person: { name: 'bobby', age: '3' } }
    


  • query-stringlibrarydoes notクエリからのネストされたオブジェクトの作成をサポート文字列。

    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ライブラリはnotフィルター '?'クエリ文字列から。

    var qs = require("qs")
    var result = qs.parse("?a=b")
    console.log(result) // { '?a': 'b' }
    


  • query-stringライブラリは「?」を除外しますクエリ文字列から。

    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's answer 、および npm compare qs vs query-string を参照してください。

32

Body-Parserドキュメントから:

解析されたデータを含む新しい本体オブジェクトは、ミドルウェアの後にリクエストオブジェクト(つまり、req.body)に入力されます。このオブジェクトにはキーと値のペアが含まれ、値は文字列または配列(extendedがfalseの場合)、または任意のタイプ(extendedがtrueの場合)になります。

そして

拡張オプションを使用すると、クエリ文字列ライブラリ(falseの場合)またはqsライブラリ(trueの場合)でURLエンコードされたデータを解析することを選択できます。 「拡張」構文により、リッチオブジェクトと配列をURLエンコード形式にエンコードできるため、URLエンコードでJSONのようなエクスペリエンスを実現できます。詳細については、qsライブラリを参照してください。

基本的に拡張すると、オブジェクト全体を解析できます。

ボディパーサー:URLエンコード

17
Logan Tegman