¿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?
¿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?
Respuestas:
Los métodos son idénticos cuando se pasa un objeto o matriz, pero res.json()
también convertirán objetos que no son, como null
y undefined
, que no son JSON válidos.
El método también utiliza la configuración de la aplicación json replacer
y json spaces
, por lo que puede formatear JSON con más opciones. Esas opciones se configuran así:
app.set('json spaces', 2);
app.set('json replacer', replacer);
Y pasó a algo JSON.stringify()
así:
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 res.json()
método 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()
a 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 res.send
, pero antes de eso:
json spaces
y json replacer
configuración de aplicacionesBuscando en los encabezados enviados ...
res.send usa content-type: text / html
res.json usa content-type: application / json
res.json
fuerza el argumento a JSON. res.send
tomará un objeto o matriz que no sea json y enviará otro tipo. Por ejemplo:
Esto devolverá un número JSON.
res.json(100)
Esto devolverá un código de estado y emitirá una advertencia para usar sendStatus.
res.send(100)
Si su argumento no es un objeto o matriz JSON (nulo, indefinido, booleano, cadena) y desea asegurarse de que se envíe como JSON, use res.json
.