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"?


2
Saya pikir res.send()dipicu res.end()- bisa jadi salah.
tymeJV


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;
}

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();

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().

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.