Apa perbedaan aktual antara res.senddan res.jsonkarena keduanya tampaknya melakukan operasi yang sama dalam merespons klien.
Apa perbedaan aktual antara res.senddan res.jsonkarena keduanya tampaknya melakukan operasi yang sama dalam merespons klien.
Jawaban:
Metode identik ketika suatu objek atau array dilewatkan, tetapi res.json()juga akan mengkonversi non-objek, seperti nulldan undefined, yang tidak valid JSON.
Metode ini juga menggunakan pengaturan json replacerdan json spacesaplikasi, sehingga Anda dapat memformat JSON dengan lebih banyak opsi. Opsi-opsi itu diatur seperti ini:
app.set('json spaces', 2);
app.set('json replacer', replacer);
Dan diteruskan ke JSON.stringify()seperti:
JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation
Ini adalah kode dalam res.json()metode yang tidak dimiliki metode kirim:
var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);
Metode ini berakhir sebagai res.send()pada akhirnya:
this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');
return this.send(body);
res.jsonakhirnya menelepon res.send, tetapi sebelum itu:
json spacesdan json replaceraplikasiMencari di header yang dikirim ...
res.send menggunakan tipe-konten: teks / html
res.json menggunakan tipe-konten: application / json
res.jsonmemaksa argumen ke JSON. res.sendakan mengambil objek atau array non-json dan mengirim tipe lain. Sebagai contoh:
Ini akan mengembalikan nomor JSON.
res.json(100)
Ini akan mengembalikan kode status dan mengeluarkan peringatan untuk menggunakan sendStatus.
res.send(100)
Jika argumen Anda bukan objek atau array JSON (null, undefined, boolean, string), dan Anda ingin memastikannya dikirim sebagai JSON, gunakan res.json.