web-dev-qa-db-fra.com

Que fait `app.use (bodyParser.json ())`?

Pour:

bodyParser.urlencoded({extended: ...})

mes recherches me montrent que si extended: true, vous pouvez analyser des objets imbriqués, ou généralement tout type. Toutefois, si vous définissez extended: false, Vous ne pouvez analyser que des chaînes ou des tableaux. Mais qu'est-ce que ...

app.use(bodyParser.json())

signifie exactement? Je veux dire, oui ... Je sais que les docs mentionnent que Json est analysé. Mais je suis toujours confus. J'ai remarqué que les applications qui définissent extended: true N'utilisent PAS du tout bodyParser.json(). Mais les applications qui extended: false Ont tendance à utiliser bodyParser.json(). Pourquoi est-ce? À la fin de la journée, les deux applications sont capables d’analyser json.

Deuxièmement, quelle est l'approche recommandée?

40
Grateful

Bien, contrairement à ce que je pensais auparavant, des recherches ultérieures montrent que extended: true Et app.use(bodyParser.json()) peuvent être utilisés ensemble. Donc, ce n'est pas seulement extended: false Qui l'utilise. L'instruction app.use(bodyParser.json()) doit être utilisée indépendamment, que vous définissiez étendu en tant que true ou false.

  • app.use(bodyParser.json()) indique au système que vous voulez que json soit utilisé.

  • bodyParser.urlencoded({extended: ...}) indique en gros au système si vous souhaitez utiliser un algorithme simple pour l'analyse superficielle (c'est-à-dire false) ou complexe pour l'analyse en profondeur pouvant traiter des objets imbriqués (c'est-à-dire true).

Consultez la documentation (c'est-à-dire https://expressjs.com/en/guide/migrating-4.html ) pour l'exemple.

68
Grateful

Le codage URL et le codage JSON permettent tous les deux de convertir un objet (imbriqué) en chaîne, mais le format est différent. Une chaîne encodée en URL n'est en général pas une chaîne JSON valide.

Une application peut utiliser une méthode de codage et une autre l’autre. Tant qu'ils ne mélangent pas les deux, cela fonctionnera.

6
trincot

bodyParser.json retourne le middleware qui analyse uniquement json. Cet analyseur accepte tout codage Unicode du corps et prend en charge le gonflage automatique des codages gzip et deflate.

Un nouvel objet body contenant les données analysées est rempli sur l'objet requête après le middleware (c'est-à-dire req.body).

3
Malatesh Patil