Quelle est la différence réelle entre res.send
et res.json
puisque les deux semblent effectuer la même opération de réponse au client.
Les méthodes sont identiques lorsqu'un objet ou un tableau est passé, mais res.json()
convertira également des non-objets, tels que null
et undefined
, qui ne sont pas des fichiers JSON valides.
La méthode utilise également les paramètres de l'application json replacer
et json spaces
pour vous permettre de formater JSON avec davantage d'options. Ces options sont définies comme suit:
app.set('json spaces', 2);
app.set('json replacer', replacer);
Et passé à une JSON.stringify()
comme ceci:
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 dans la méthode res.json()
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 se termine par 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
et json replacer
En regardant dans les en-têtes envoyés ...
res.send utilise content-type: text/html
res.json utilise le type de contenu suivant: application/json