2015-03-20 11 views
15

Nella versione corrente di body-parser, è ora necessaria l'opzione extended quando si utilizza bodyParser.urlencoded(). Nel README, spiega:body-parser - opzione estesa (qs vs querystring)

L'opzione estesa consente di scegliere tra l'analisi dei dati con codifica URL con la libreria querystring (quando false) o la libreria qs (quando è true).

[...]

valore predefinito è vero, ma usando il default è stato sconsigliato. Si prega di ricercare la differenza tra qs e querystring e scegliere l'impostazione appropriata.

Non ho trovato alcuna informazione utile o specifica su questo. Ho trovato solo un deprecato node-querystring.

Questa opzione dovrebbe sempre essere vera?

risposta

28

Il motivo di questo messaggio è che body-parser è about to change default value for extended from true to false.

Il protocollo esteso utilizza qs library per analizzare i dati x-www-form-urlencoded. Il vantaggio principale di qs è che utilizza un algoritmo di serializzazione/deserializzazione molto potente, in grado di serializzare qualsiasi struttura di dati simile a JSON.

Tuttavia, i browser Web normalmente non utilizzano questo protocollo, poiché x-www-form-urlencoded è stato progettato per serializzare moduli HTML flat. Tuttavia, potrebbe rivelarsi utile se si invieranno strutture di dati avanzate utilizzando ajax.

querystring library` fornisce un algoritmo di serializzazione/deserializzazione di base, quello utilizzato da tutti i browser Web per serializzare i dati del modulo. Questo algoritmo di base è significativamente più semplice di quello esteso, ma limitato a strutture di dati piatte.

Entrambi gli algoritmi funzionano esattamente allo stesso modo con i dati flat.

Ora, quando conoscete i pro ei contro di entrambi gli algoritmi, sta a voi decidere quale si adatta meglio alla vostra applicazione.

+1

grazie mille. spero di non essere solo cattivo a googling e questo aiuterà qualcun altro –

+2

a commentare che 'extended: false' crea disordine su array 2D :( – woojoo666

+2

@ woojoo666 perché l'algoritmo di serializzazione/deserializzazione di base non supporta strutture di dati annidate. –