Qual è la differenza effettiva tra res.sende res.jsoncome entrambi sembra eseguire la stessa operazione di risposta al client.
Qual è la differenza effettiva tra res.sende res.jsoncome 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 nulle undefined, che non sono JSON validi.
Il metodo utilizza anche le impostazioni dell'applicazione json replacere 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.jsonalla fine chiama res.send, ma prima che:
json spacesejson replacerOsservando le intestazioni inviate ...
res.send utilizza il tipo di contenuto: text / html
res.json utilizza il tipo di contenuto: application / json
res.jsonimpone l'argomento a JSON. res.sendprenderà 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.