2011-12-28 26 views
11

khi tôi đang cố gắng sử dụng các mô-đun http để truy cập máy chủ không tồn tại, như thế này:Cách bắt lỗi http node.js trên máy chủ không tồn tại?

requestToRemote = http.createClient(80, 'fjasdfhasdkfj.vvvxcz').request(
    method, 
    path, 
    headers 
); 

Nhưng tôi nhận được lỗi sau:

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: getaddrinfo ENOENT 
    at errnoException (dns.js:31:11) 
    at Object.onanswer [as oncomplete] (dns.js:140:16) 

Tôi muốn bắt lỗi này, vì vậy tôi đã cố gắng thử/bắt và thiết lập các trình lắng nghe lỗi của một loạt các thuộc tính yêu cầu, nhưng không ai trong số nếu làm việc. Làm thế nào tôi có thể bắt lỗi?

Trả lời

9

Hình như lỗi được ném từ http.Client, không phải là yêu cầu. Làm thế nào về một cái gì đó như:

var site = http.createClient(80, host); 
site.on('error', function(err) { 
    sys.debug('unable to connect to ' + host); 
}); 
var requestToRemote = site.request(...); 

FYI, http.createClient đã bị phản đối - sau nên làm việc bằng cách sử dụng phương pháp thuận tiện nhận được:

http.get({host: host}, function(res) { 
    ... 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 
+0

Làm cách nào để sử dụng giá trị 'res' trong gọi lại để xem nội dung của phản hồi là gì? –

-1

bạn có thể thử và giải quyết máy chủ bằng mô-đun dns trước khi chạy mã của mình.

http://nodejs.org/docs/latest/api/dns.html#dns.resolve

+4

Đây không phải là một giải pháp tốt, vì nó sau đó sẽ liên quan đến việc giải quyết tên máy chủ hai lần. Ngay cả khi được lưu trong bộ nhớ cache, vẫn có một hình phạt nhỏ có thể nhân lên nhanh chóng, tùy thuộc vào nhu cầu của ứng dụng của bạn. Chắc chắn, sau đó bạn có thể sử dụng địa chỉ mạng thay vì tên máy chủ khi bạn thực hiện yêu cầu, nhưng sau đó bạn phải xử lý các tiêu đề yêu cầu xác định chính máy chủ lưu trữ. – Brad

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