2015-11-16 15 views
9

Tôi đã đặt máy chủ nút có phần mềm trung gian Express. Tôi nhận được lỗi ECONNABORTED ngẫu nhiên trên một số tệp khi tải tệp HTML kích hoạt khoảng 10 lần tải khác (js, css, v.v.). Các lỗi chính xác là:Lỗi 'ECONNABORTED' ngẫu nhiên khi sử dụng sendFile trong Express/Node

{ [Error: Request aborted] code: 'ECONNABORTED' } 

tạo theo mã đơn giản này (sau khi tôi đã cố gắng để gỡ lỗi vấn đề này):

res.sendFile(res.locals.physicalUrl,function (err) { 
    if (err) 
     console.log(err); 
    ... 
    } 

Nhiều bài viết nói về lỗi này phát sinh từ không xác định tên đường dẫn đầy đủ. Đó không phải là tình huống ở đây. Tôi chỉ định đường dẫn đầy đủ và thực sự lỗi được tạo ngẫu nhiên. Có những lúc trang và tất cả các liên kết tiếp theo của nó tải hoàn hảo và có những lúc chúng không. Tôi đã cố gắng xóa bộ nhớ cache và không tìm thấy bất kỳ mẫu nào để kết nối nó với điều này.

Lỗi cụ thể này dường như là một thuật ngữ chung cho kết nối socket bị hủy bỏ và được thảo luận trong ngữ cảnh của các ứng dụng khác như FTP.

Sau khi nhận ra rằng đề người lao động nút có thể được tăng lên, tôi đã cố gắng để làm như vậy sử dụng:

process.env.UV_THREADPOOL_SIZE = 20; 

Tuy nhiên, hiểu biết của tôi là ngay cả vắng mặt này, tại hầu hết các chuyển tập tin có thể phải chờ cho một công nhân chủ đề được miễn phí và không bị hủy bỏ. Tôi không nói về các tệp lớn ở đây, tất cả các tệp đều dưới 1 MB.

Tôi có cảm giác ruột rằng điều này không liên quan gì đến nút trực tiếp.

Vui lòng trỏ đến bất kỳ khả năng nào khác (nút hoặc cách khác) để xử lý lỗi này. Ngoài ra, bất kỳ giải pháp gián tiếp nào khác? Thử lại vài lần có thể là một lần nhưng điều đó sẽ vụng về. EDIT: Không, tôi không thể thử lại. Tiêu đề đã được gửi với lỗi!

A SIDE LƯU Ý: Nhiều ví dụ về việc sử dụng bỏ qua sendFile bằng cách sử dụng gọi lại do đó tạo ấn tượng rằng đó là cuộc gọi đồng bộ. Không phải vậy. Không sử dụng gọi lại mọi lúc, kiểm tra thành công và chỉ sau đó chuyển sang phần mềm trung gian "tiếp theo" hoặc thực hiện các bước thích hợp nếu gửi không thành công vì bất kỳ lý do gì. Không làm như vậy có thể gây khó khăn cho việc gỡ lỗi hậu quả trong một môi trường không đồng bộ.

+0

Khi sử dụng 'res.sendFile', tôi đã thấy một vài' ECONNABORTED' ngay cả khi 'res.statusCode' là' 200'. Tôi đã không tìm thấy một giải pháp cho điều này hiện nay. – paperclip

Trả lời

2

Xem https://stackoverflow.com/a/36949631/2798152 Nó có thể được có thể là trong một số trường hợp, bạn chấm dứt kết nối bằng cách gọi res.end trước khi cuộc gọi không đồng bộ để res.sendFile kết thúc?

Nếu đó không phải là trường hợp - bạn có thể ghi đè thêm mã ứng dụng của mình không?

+1

Điều này đã làm việc cho tôi. 'res.end' được gọi trước' res.download'. +1 – Avraham

0

Gỡ cài đặt và cài đặt lại MongoDB đã giải quyết vấn đề này cho tôi.

Tôi đang đối mặt với cùng một vấn đề. Nó bắt đầu xảy ra khi tôi buộc phải khởi động lại máy tính xách tay của tôi bởi vì nó không phản hồi. Khi khởi động lại, cố gắng kết nối với máy chủ mongo bằng nút jj, luôn luôn gặp lỗi ECONNABORTED

Các vấn đề liên quan