Tôi là người mới bắt đầu Express.js
và tôi bối rối bởi hai từ khóa này: res.end()
và res.send()
.
Chúng giống nhau hay khác nhau?
Tôi là người mới bắt đầu Express.js
và tôi bối rối bởi hai từ khóa này: res.end()
và res.send()
.
Chúng giống nhau hay khác nhau?
Câu trả lời:
res.send()
sẽ gửi phản hồi HTTP. Cú pháp của nó là,
res.send([body])
Tham số thân có thể là đối tượng Bộ đệm, Chuỗi, đối tượng hoặc Mảng. Ví dụ:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
Xem điều này để biết thêm.
res.end()
sẽ kết thúc quá trình đáp ứng. Phương thức này thực sự đến từ lõi Node, cụ thể là response.end()
phương pháp của http.ServerResponse
. Nó được sử dụng để nhanh chóng kết thúc phản hồi mà không có bất kỳ dữ liệu nào. Ví dụ:
res.end();
res.status(404).end();
Đọc này để biết thêm.
express
nhưng từ tiêu đề đã nghĩ - một người gửi một cái gì đó, một người kết thúc một cái gì đó ....
res.send()
mà không có gì. Điều này có hành động như thế res.end()
nào?
Tôi muốn nhấn mạnh hơn một chút về một số khác biệt chính giữa res.end()
& res.send()
liên quan đến tiêu đề phản hồi và lý do tại sao chúng quan trọng.
1. res.send () sẽ kiểm tra cấu trúc đầu ra của bạn và đặt thông tin tiêu đề tương ứng.
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
app.get('/',(req,res)=>{
res.send({msg:'hello'});
});
Trường hợp với res.end () bạn chỉ có thể trả lời bằng văn bản và nó sẽ không đặt " Kiểu nội dung "
app.get('/',(req,res)=>{
res.end('<b>hello</b>');
});
2. res.send () sẽ đặt thuộc tính "ETag" trong tiêu đề phản hồi
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
Tại sao thẻ này quan trọng?
Tiêu đề phản hồi HTTP ETag là một định danh cho một phiên bản cụ thể của tài nguyên. Nó cho phép cache được hiệu quả hơn và tiết kiệm băng thông, vì máy chủ web không cần gửi phản hồi đầy đủ nếu nội dung không thay đổi.
res.end()
sẽ KHÔNG đặt thuộc tính tiêu đề này
những gì res.send () làm, là để thực hiện res.write , res.setHeaders và res.end .
nó kiểm tra dữ liệu bạn gửi và đặt tiêu đề chính xác,
sau đó truyền dữ liệu với res.write và cuối cùng, nó sử dụng res.end để đặt kết thúc yêu cầu.
có một số trường hợp bạn sẽ muốn thực hiện thủ công, ví dụ nếu bạn muốn tập tin luồng hoặc tập dữ liệu lớn, trong trường hợp này bạn sẽ muốn tự đặt tiêu đề và sử dụng res.write để giữ luồng lưu lượng.
res.end
được sử dụng bởi nút đơn giản, nơires.send
được sử dụng bởi framwork express