Res.end () node.js ile ifade edilmeli mi?


92

Birkaç Express uygulamam var ve bazı modüllerde res.end()bir istek işleyicisinin sonunda ( res.sendveya sonrasında res.json) çağrılırken, diğerlerinde çağrılmadığını görüyorum .

Örneğin:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

veya:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

Her iki durum da işe yarıyor, ancak birçok istek çalıştırdığımda sızıntılardan veya dosya tanımlayıcılarının tükenmesinden veya buna benzer bir şeyden korkuyorum. Hangisi "daha doğru"?


2
res.send()Tetiklendiğini düşündüm res.end()- yanlış olabilir.
tymeJV


Teşekkür @ Trevor-Senior, aynı dosyaya bakıyordum ve görmedim ...
greuze

@greuze Daha önce araştırdım, bu yüzden bir başlangıç ​​yaptım :). Devam ettim ve yorumu diğerleri için daha yapılandırılmış bir cevaba taşıdım.
JayQ

Selam. Peki res.status (<any>) .json (); Ayrıca başka bir sorum var. Bu aramayı reddediyorsam hangi hata kodunu geri göndermeliyim? gibi kullanıcı limitini aştı mı?
9

Yanıtlar:


121

Sorunuzun cevabı hayır. Sen buna gerek yok res.end()eğer arama res.send(). seni res.send()arıyor res.end().

Alındığı /lib/response.js , burada sonudur res.send()fonksiyonu:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

4
Belki anılarım nihayet daha iyi oluyor :)
tymeJV

8

end () işlevini çağırmanız gereken bir örnek, indirmek için bir dosya olarak arabellek gönderdiğiniz zamandır.

res.write(buffer);
res.end();

5

res.end([data] [, encoding])

Yanıt sürecini sonlandırır. Bu yöntem aslında Düğüm çekirdeğinden gelir , özellikle response.end() method of http.ServerResponse. yanıtı herhangi bir veri olmadan hızlı bir şekilde sonlandırmak için kullanın.

Verilerle yanıt vermeniz gerekiyorsa, bunun yerine aşağıdaki gibi yöntemler kullanın: res.send() and 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.