Tôi có đoạn code sau trong Node.js trong một chức năng readFile
:Tại sao phản hồi bị đóng và chưa kết thúc?
res.setHeader("content-type", 'application/octet-stream');
res.setHeader("Content-Disposition", 'attachment; filename="' + 'original' + '"' + "; filename*=UTF-8''" + 'original' + "");
var readStream;
var exists = fs.existsSync(fullPath);
if (exists) {
callback(true);
readStream = fs.createReadStream(fullPath);
readStream.pipe(res);
} else {
callback(false);
return;
}
res.on('finish', function(){
logger.info('response ending');
readStream.close();
})
res.on('close', function(){
logger.info('response close');
readStream.close();
})
res.on('error', function(error){
logger.info(error);
readStream.close();
})
Đối với một số lý do, một số yêu cầu được phát ra sự kiện close
, trong khi khác finish
. Theo tôi hiểu, close
được phát ra khi có sự cố.
Sự kiện đóng có thể kích hoạt từ 2 giây đến 2 phút. Trong một số ít trường hợp, không có số close
và không có sự kiện nào được phát ra và tất cả yêu cầu bị "kẹt", chờ đợi phản hồi.
Điều gì có thể là lý do khiến một số yêu cầu thành công và một số yêu cầu khác không thành công?
EDIT
Làm thế nào tôi có thể biết lý do tại sao một sự kiện gần đã phát ra? Có phải là một vấn đề của khách hàng hoặc một lỗi trong ứng dụng của tôi không?
Bạn thử nghiệm điều này như thế nào? –
@JoshC. Khách hàng của tôi gửi cho tôi yêu cầu (Tôi đang sử dụng mô-đun thể hiện). Tôi nhận thấy rằng ứng dụng của tôi đang nhận được 'readStream.pipe (res);'. Sau 2 giây đến 2 phút, sự kiện đóng sẽ được kích hoạt. –