¿Cuál es la diferencia real entre res.sendy res.jsonya que ambos parecen realizar la misma operación de responder al cliente?
¿Cuál es la diferencia real entre res.sendy res.jsonya 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 nully undefined, que no son JSON válidos.
El método también utiliza la configuración de la aplicación json replacery 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.jsonfinalmente llama res.send, pero antes de eso:
json spacesy json replacerconfiguración de aplicacionesBuscando en los encabezados enviados ...
res.send usa content-type: text / html
res.json usa content-type: application / json
res.jsonfuerza el argumento a JSON. res.sendtomará 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.