Ten en cuenta que en las ciencias cualquier problema casi siempere puede tener diversas soluciones, de igual modo nosotros mostramos lo más óptimo y mejor.
Solución:
Los métodos son idénticos cuando un objeto o array se pasa, pero res.json()
también convertirá no objetos, como null
y undefined
que no son JSON válidos.
El método también utiliza el json replacer
y json spaces
configuración de la aplicación, para que pueda formatear JSON con más opciones. Esas opciones se configuran así:
app.set('json spaces', 2);
app.set('json replacer', replacer);
Y pasó a un JSON.stringify()
al igual que:
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 un res.send()
en el final:
this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');
return this.send(body);
https://github.com/visionmedia/express/blob/ee228f7aea6448cf85cc052697f8d831dce785d5/lib/response.js#L174
res.json
eventualmente llama res.send
pero antes de eso:
- respeta el
json spaces
yjson replacer
Ajustes de Aplicacion - asegura que la respuesta tendrá un juego de caracteres utf8 y un tipo de contenido de aplicación/json
Mirando en los encabezados enviados…
res.send utiliza tipo de contenido:texto/html
res.json utiliza tipo de contenido: aplicación/json
editar: enviar en realidad cambia lo que se envía en función de lo que se proporciona, por lo que las cadenas se envían como texto/html, pero si le pasa un objeto, emite application/json.
Valoraciones y reseñas
Recuerda difundir este artículo si te fue útil.