2011-10-13 28 views
6

Tôi có tập lệnh node.js và bất cứ khi nào xảy ra lỗi, node.js sẽ ngừng chạy với lỗi xảy ra.node.js, phát hiện lỗi sao cho tập lệnh không bị hỏng?

Cách thích hợp để kiểm tra lỗi trong node.js để nó không phá vỡ tập lệnh và làm node.js dừng lại là gì?

+0

Khắc phục lỗi của bạn? Quấn mã với các lỗi thời gian chạy tiềm năng trong các khối 'try ... catch'? Điều này khác với bất kỳ ngôn ngữ/thông dịch viên nào khác? – nrabinowitz

+0

@nrabinowitz Vì vậy, với thử bắt nếu một lỗi xảy ra nó sẽ không phá vỡ các kịch bản? Và xin vui lòng tha thứ cho sự thiếu hiểu biết của tôi, rất mới mẻ đối với các nodej vì thế nó nằm ngoài mức độ thoải mái của tôi. Đang cố gắng tìm hiểu nó. – John

+0

có, 'try ... catch' trong Javascript hoạt động giống như trong các ngôn ngữ khác, cho phép bạn nắm bắt và xử lý các lỗi trong mã thời gian chạy (mặc dù nó sẽ không giúp lỗi phân tích thời gian, ví dụ: lỗi cú pháp). Xem https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch – nrabinowitz

Trả lời

17

Bạn có thể bắt lỗi khác còn tự do bằng cách thiết lập như sau:

process.on('uncaughtException', function (exception) { 
    // handle or ignore error 
    }); 

Tất nhiên, nếu bạn chạy script của bạn trong một cái gì đó giống như mãi mãi hoặc nút-giám sát, khi kịch bản của bạn "dừng lại" nó sẽ bắt đầu sao lưu , có thể giải quyết vấn đề của bạn.

+0

Thực sự rất tiện dụng ... nó đã bắt đầu gây khó chịu khi kiểm tra các tệp nhật ký của tôi – Carlton

+1

Điều này vẫn được khuyến nghị? có tác dụng phụ nào không? – Samson

+0

Phương pháp xử lý lỗi này không được khuyến khích mạnh mẽ trên trang web của Joylet. https://www.joyent.com/developers/node/design/errors – MattSidor

3

Bắt uncaughtException không còn được khuyến nghị nữa.

Sử dụng domains được ưu tiên. Sử dụng hoặc "uncaughtException" hoặc tên miền, khởi động lại quá trình này là rất khuyến khích sau khi xử lý ngoại lệ.

Để tự động khởi động lại quy trình, NodeJS cung cấp một thư viện khác có tên là Cluster hỗ trợ trong việc quản lý chuỗi công việc.

+1

miền hiện không được dùng nữa. https://nodejs.org/api/domain.html – MattSidor

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