Phải gọi res.end () rõ ràng với node.js?


89

Tôi có một số ứng dụng Express và tôi thấy rằng trong một số mô-đun, res.end()được gọi ở cuối trình xử lý yêu cầu (sau res.sendhoặc res.json), trong khi ở các mô-đun khác, nó không được gọi.

Ví dụ:

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

hoặc là:

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

Cả hai trường hợp đều hoạt động, nhưng tôi sợ về việc rò rỉ hoặc hết bộ mô tả tệp hoặc những thứ tương tự như vậy, khi tôi chạy nhiều yêu cầu. Cái nào là "đúng hơn"?


2
Tôi nghĩ đã res.send()được kích hoạt res.end()- có thể là sai tho.
tymeJV


Cảm ơn @ Trevor-Senior, tôi đã xem nó cùng một tệp tin đó và tôi không thấy nó ...
greuze

@greuze Tôi đã tìm kiếm nó trước đây nên tôi đã có một khởi đầu thuận lợi :). Tôi đã tiếp tục và chuyển nhận xét thành một câu trả lời có cấu trúc hơn cho những người khác.
JayQuerie.com

Chào. Còn res.status (<any>) .json (); Và tôi cũng có một câu hỏi khác. Tôi nên gửi lại mã lỗi nào nếu tôi đang từ chối cuộc gọi đó? như người dùng bị vượt quá giới hạn của mình?
9 giờ

Câu trả lời:


121

Câu trả lời cho câu hỏi của bạn là không. Bạn không cần phải gọi res.end()nếu bạn gọi res.send(). res.send()cuộc gọi res.end()cho bạn.

Lấy từ /lib/response.js , đây là phần cuối của res.send()hàm:

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

4
Có lẽ những ký ức của tôi cuối cùng cũng trở nên tốt hơn :)
tymeJV

8

một ví dụ mà bạn phải gọi hàm end () là khi bạn gửi bộ đệm dưới dạng tệp để tải xuống.

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

5

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

Kết thúc quá trình phản hồi. Phương pháp này thực sự xuất phát từ lõi Node , cụ thể là response.end() method of http.ServerResponse. Sử dụng để nhanh chóng kết thúc phản hồi mà không cần bất kỳ dữ liệu nào.

Nếu bạn cần phản hồi bằng dữ liệu, thay vào đó hãy sử dụng các phương pháp như res.send() and res.json().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.