Quelle est la différence réelle entre res.send
et res.json
comme les deux semble effectuer la même opération de réponse au client.
Quelle est la différence réelle entre res.send
et res.json
comme les deux semble effectuer la même opération de réponse au client.
Réponses:
Les méthodes sont identiques lorsqu'un objet ou un tableau est transmis, mais res.json()
convertissent également les non-objets, tels que null
et undefined
, qui ne sont pas des JSON valides.
La méthode utilise également les paramètres d'application json replacer
et json spaces
, de sorte que vous pouvez formater JSON avec plus d'options. Ces options sont définies comme suit:
app.set('json spaces', 2);
app.set('json replacer', replacer);
Et passé à un JSON.stringify()
pareil:
JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation
C'est le code de la res.json()
méthode que la méthode d'envoi n'a pas:
var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);
La méthode finit comme un res.send()
à la fin:
this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');
return this.send(body);
res.json
appelle finalement res.send
, mais avant cela:
json spaces
etjson replacer
En regardant dans les en-têtes envoyés ...
res.send utilise le type de contenu: text / html
res.json utilise le type de contenu: application / json
res.json
force l'argument à JSON. res.send
prendra un objet ou un tableau non json et enverra un autre type. Par exemple:
Cela renverra un numéro JSON.
res.json(100)
Cela renverra un code d'état et émettra un avertissement pour utiliser sendStatus.
res.send(100)
Si votre argument n'est pas un objet ou un tableau JSON (null, non défini, booléen, chaîne) et que vous voulez vous assurer qu'il est envoyé en JSON, utilisez res.json
.