2013-09-27 8 views
154

Qual è la differenza effettiva tra res.send e res.json poiché entrambi sembrano eseguire la stessa operazione di risposta al client.Differenza tra res.send e res.json in Express.js

+58

Prendetevi un momento per notare come le persone che inviano risposte appena andato a GitHub e leggere il codice sorgente. Questa è una buona abitudine da imparare e stabilire. La verità sta nella fonte. –

+7

@PeterLyons Usa The Source, Luke! – wprl

+24

@PeterLyons Sono d'accordo che questa è una buona abitudine, ma intendevi che ram dovrebbe aver guardato la fonte invece di porre la domanda? Questo non sconfigge lo scopo di questo sito? La presenza di questa domanda, con le risposte che si riferiscono a una buona fonte (The Source!) È utile. – LinusR

risposta

168

I metodi sono identici quando viene passato un oggetto o array, ma res.json() anche convertire i non-oggetti, come null e undefined, che non sono JSON valido.

Il metodo utilizza anche le impostazioni dell'applicazione json replacer e json spaces, quindi è possibile formattare JSON con più opzioni. Queste opzioni sono impostate in questo modo:

app.set('json spaces', 2); 
app.set('json replacer', replacer); 

e passato a un JSON.stringify() in questo modo:

JSON.stringify(value, replacer, spacing); 
// value: object to format 
// replacer: rules for transforming properties encountered during stringifying 
// spacing: the number of spaces for indentation 

Questo è il codice nel metodo res.json() che il metodo di invio non ha:

var app = this.app; 
var replacer = app.get('json replacer'); 
var spaces = app.get('json spaces'); 
var body = JSON.stringify(obj, replacer, spaces); 

procedimento finisce come res.send() alla fine:

this.charset = this.charset || 'utf-8'; 
this.get('Content-Type') || this.set('Content-Type', 'application/json'); 

return this.send(body); 
6

Ricerca nelle intestazioni inviate ...
res.send utilizza Content-Type: text/html
res.json utilizza content-type: application/json