Express.js'de res.send ve res.json arasındaki fark


202

Her ikisi arasındaki gerçek fark nedir res.sendve res.jsonher ikisi de istemciye yanıt verme işlemini aynı şekilde yapıyor gibi görünüyor.


74
Yanıtlar gönderen kişilerin github'a nasıl gittiğini ve kaynak kodunu nasıl okuduğunu not edin. Bu öğrenmek ve kurmak için iyi bir alışkanlıktır. Gerçek Kaynakta yatar.
Peter Lyons

31
@PeterLyons Bunun iyi bir alışkanlık olduğunu kabul ediyorum, ama koçun soruyu sormak yerine kaynağa bakması gerektiği anlamına mı geldin? Bu, sitenin amacını bozmaz mı? Bu sorunun varlığı, iyi bir kaynağa (Kaynak!) Atıfta bulunan cevaplarla faydalıdır.
LinusR

3
Evet, bir adama balık tutmayı öğretin.
Peter Lyons

73
Bize "RTFS" (Kaynağı Oku) dendiğinde, aslında dokümanların ne yapmaları gerektiği konusunda iletişim kuramadığı anlamına gelir. Evet, kaynağa sahip olmak onu kontrol etmemize izin veriyor, ancak belirsiz durumlar haricinde kaynağa ulaşmamak gerekiyor. Tüm bu Express özellikleri Gerçekten Harika, ancak dokümanlar çok azalıyor. SO, insanların dokümanlardan anlayamadığı Express şeyleriyle ilgili sorularla dolu (başıma geliyor).
Juan Lanus

3
Bazen okuma kaynağı yeterli değildir ve cevaplardan iyi bir açıklama gelebileceğinden, bu, ilgili kavramın en iyi şekilde anlaşılmasını sağlayacaktır. Bazı insanlar basitçe kaynak okuyabilir ve anlayabilirler, ama javascript dostu olması gerekmeyen yeni başlayanlar ne olacak? Bunu düşün.
cram2208

Yanıtlar:


212

Bir nesne veya dizi iletildiğinde yöntemler aynıdır, ancak geçerli JSON olmayan ve res.json()gibi nesneler olmayanları da dönüştürecektir .nullundefined

Yöntem ayrıca json replacerve json spacesuygulama ayarlarını kullanır , böylece JSON'u daha fazla seçenekle biçimlendirebilirsiniz. Bu seçenekler şu şekilde ayarlanır:

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

Ve JSON.stringify()böyle bir şeye geçti :

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

res.json()Gönderme yönteminin sahip olmadığı yöntemdeki kod :

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

Yöntem res.send()sonunda bir sona erer :

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

return this.send(body);


16

Gönderilen başlıklara bakıldığında ...
res.send, content-type: text / html
res.json, content-type: application / json kullanır


0

res.jsonargümanı JSON'a zorlar. res.sendjson olmayan bir nesne veya dizi alır ve başka bir tür gönderir. Örneğin:

Bu bir JSON numarası döndürür.

res.json(100)

Bu bir durum kodu döndürecek ve sendStatus'u kullanmak için bir uyarı verecektir.

res.send(100)

Argümanınız bir JSON nesnesi veya dizisi (null, undefined, boolean, string) değilse ve JSON olarak gönderildiğinden emin olmak istiyorsanız, kullanın res.json.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.