Harus res.end () dipanggil secara ekspres dengan node.js?

89

Saya memiliki beberapa aplikasi Express , dan saya melihat bahwa di beberapa modul, res.end()dipanggil di akhir penangan permintaan (setelah res.sendatau res.json), sementara di modul lain, tidak dipanggil.

Sebagai contoh:

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

atau:

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

Kedua kasus berfungsi, tetapi saya takut kebocoran atau kehabisan deskriptor file atau semacamnya, ketika saya menjalankan banyak permintaan. Mana yang "lebih benar"?

greuze
sumber
2
Saya pikir res.send()dipicu res.end()- bisa jadi salah.
tymeJV
3
@tymeJV Anda benar, memang: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com
Terima kasih @ Trevor-Senior, saya melihat file yang sama dan saya tidak melihatnya ...
greuze
@greuze Saya sudah mencarinya sebelumnya jadi saya harus memulainya terlebih dahulu :). Saya melanjutkan dan memindahkan komentar menjadi jawaban yang lebih terstruktur untuk orang lain.
JayQuerie.com
Hai. Dan bagaimana dengan res.status (<any>) .json (); Dan saya juga punya pertanyaan lain. kode kesalahan mana yang harus saya kirim kembali jika saya menolak panggilan itu? seperti pengguna melebihi batasnya?
9me

Jawaban:

121

Jawaban atas pertanyaan Anda tidak. Anda tidak perlu menelepon res.end()jika menelepon res.send(). res.send()panggilan res.end()untukmu.

Diambil dari /lib/response.js , inilah akhir dari res.send()fungsinya:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}
JayQuerie.com
sumber
4
Mungkin ingatan saya akhirnya membaik :)
tymeJV
8

salah satu contoh di mana Anda harus memanggil fungsi end () adalah ketika Anda mengirim buffer sebagai file untuk diunduh.

res.write(buffer);
res.end();
Konstantin Adamov
sumber
5

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

Mengakhiri proses tanggapan. Metode ini sebenarnya berasal dari inti Node , khususnya response.end() method of http.ServerResponse. Penggunaan untuk mengakhiri respons dengan cepat tanpa data apa pun.

Jika Anda perlu merespons dengan data, gunakan metode seperti res.send() and res.json().

Adiii
sumber