Qual è la differenza effettiva tra res.send
e res.json
come entrambi sembra eseguire la stessa operazione di risposta al client.
Qual è la differenza effettiva tra res.send
e res.json
come entrambi sembra eseguire la stessa operazione di risposta al client.
Risposte:
I metodi sono identici quando viene passato un oggetto o un array, ma res.json()
convertiranno anche i non oggetti, come null
e undefined
, che non sono JSON validi.
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()
simile così:
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 res.json()
metodo che il metodo send 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);
Il metodo finisce come res.send()
a alla fine:
this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');
return this.send(body);
res.json
alla fine chiama res.send
, ma prima che:
json spaces
ejson replacer
Osservando le intestazioni inviate ...
res.send utilizza il tipo di contenuto: text / html
res.json utilizza il tipo di contenuto: application / json
res.json
impone l'argomento a JSON. res.send
prenderà un oggetto o un array non json e invierà un altro tipo. Per esempio:
Questo restituirà un numero JSON.
res.json(100)
Ciò restituirà un codice di stato ed emetterà un avviso per utilizzare sendStatus.
res.send(100)
Se l'argomento non è un oggetto o una matrice JSON (null, indefinito, booleano, stringa) e si desidera assicurarsi che venga inviato come JSON, utilizzare res.json
.