javascript - node - Diferencia entre res.send y res.json en Express.js
node express tutorial (3)
Buscando en los encabezados enviados ...
res.send usa content-type: text / html
res.json usa content-type: application / json
¿Cuál es la diferencia real entre res.send
y res.json
ya que ambos parecen realizar la misma operación de responder al cliente.
Los métodos son idénticos cuando se pasa un objeto o matriz, pero res.json()
también convertirá no objetos, como null
e undefined
, que no son JSON válidos.
El método también usa los ajustes de la aplicación json replacer
y json spaces
, por lo que puede formatear JSON con más opciones. Esas opciones se establecen así:
app.set(''json spaces'', 2);
app.set(''json replacer'', replacer);
Y pasó a un JSON.stringify()
como ese:
JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation
Este es el código en el método res.json()
que el método de envío no tiene:
var app = this.app;
var replacer = app.get(''json replacer'');
var spaces = app.get(''json spaces'');
var body = JSON.stringify(obj, replacer, spaces);
El método termina como res.send()
al final:
this.charset = this.charset || ''utf-8'';
this.get(''Content-Type'') || this.set(''Content-Type'', ''application/json'');
return this.send(body);
res.json
finalmente llama a res.send
, pero antes de eso:
- respeta los ajustes de la aplicación
json spaces
yjson replacer
- asegura que la respuesta tendrá utf8 charset y application / json content-type