2012-09-19 21 views
12

Tôi mới sử dụng node.js và đang cố gắng thử nghiệm các công cụ cơ bản.Node.js http.createServer cách nhận lỗi

Mã của tôi là thế này

var http = require("http"); 
http.createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello World"); 
    response.end(); 
}).listen(8888); 

Dưới đây là các câu hỏi - làm thế nào tôi có thể thấy các trường hợp ngoại lệ ném (hoặc các sự kiện ném) khi gọi createServer? Tôi đã cố gắng thử/bắt nhưng nó dường như không hoạt động. Trong API của mô-đun, tôi không thể tìm thấy bất kỳ tham chiếu nào đến nó. Tôi yêu cầu vì tôi vô tình bắt đầu một máy chủ trên một cổng đã thực hiện (8888) và lỗi tôi nhận được (trong dòng lệnh) là Lỗi: EDDRINUSE, điều này đủ hữu ích nhưng sẽ rất tuyệt khi có thể hiểu được lỗi bị bắt trong nút.

Trả lời

1

Bạn có thể sử dụng

process.on('uncaughtException', function(e){ 
    console.log(e); 
}); 

Xử lý ngoại lệ còn tự do. Bất kỳ ngoại lệ không được xử lý nào từ máy chủ web đều có thể bị bắt như thế này.

4

In ngăn xếp các ngoại lệ chưa được sử dụng bằng cách sử dụng mã sau.

process.on('uncaughtException', function(err) { 
      console.error(err.stack); 
}); 
+0

Đây là một cách tiếp cận xấu, bạn có thể bị rò rỉ tài nguyên như điên ([>> tuyên bố chính thức] (https://nodejs.org/api /process.html#process_event_uncaughtexception)) –

19

Bạn có thể thực hiện việc này bằng cách xử lý sự kiện lỗi trên máy chủ bạn đang tạo. Đầu tiên, lấy kết quả của .createServer().

var server = http.createServer(function(request, response) { 

Sau đó, bạn có thể dễ dàng xử lý các lỗi:

server.on('error', function (e) { 
    // Handle your error here 
    console.log(e); 
}); 
+2

Đây là giải pháp tốt nhất vì nó lắng nghe trên phạm vi 'máy chủ' phù hợp chứ không phải toàn bộ quá trình. –

+0

Giải pháp tốt hơn nhiều. –

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