Trước hết, expressJS không ném sự kiện uncaughtException
, quá trình thực hiện, do đó, không có gì ngạc nhiên khi mã của bạn không hoạt động.
Vì vậy, hãy sử dụng: process.on('uncaughtException',handler)
để thay thế.
Tiếp theo, expressJS đã cung cấp một phương tiện tiêu chuẩn xử lý lỗi đó là sử dụng các chức năng trung gian nó cung cấp cho mục đích này, như trong:
app.configure(function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
Hàm này trả về một thông báo lỗi cho khách hàng, với tùy chọn stacktrace và được ghi lại tại connectJS errorHandler.
(Lưu ý rằng errorHandler- thực sự là một phần của connectJS và chỉ được tiếp xúc bởi expressJS.)
Nếu hành vi errorHandler hiện cung cấp là không đủ cho nhu cầu của bạn, nguồn gốc của nó nằm ở connectJS's errorHandler
middleware và có thể dễ dàng sửa đổi để phù hợp với nhu cầu của bạn.
Tất nhiên, chứ không phải là thay đổi chức năng này trực tiếp, "đúng" cách để làm điều này là để tạo ra errorHandler- của riêng bạn, bằng cách sử dụng phiên bản connectJS như là một điểm khởi đầu, như trong:
var myErrorHandler = function(err, req, res, next){
...
// note, using the typical middleware pattern, we'd call next() here, but
// since this handler is a "provider", i.e. it terminates the request, we
// do not.
};
Và cài đặt nó vào expressJS như:
app.configure(function(){
app.use(myErrorHandler);
});
Xem Just Connect it, Already cho một lời giải thích ý tưởng của filter
và provider
middleware và How To Write Middleware for Connect/Express connectJS cho một hướng dẫn tốt bằng văn bản.
Bạn cũng có thể tìm thấy những hữu ích:
Cuối cùng, một nguồn tuyệt vời của thông tin liên quan đến expressJS thử nghiệm có thể được tìm thấy trong its own tests.
'lỗi' 'listener.on, ...' nên làm việc. Liệu nó chỉ làm theo dõi stack bình thường và sụp đổ ngay cả khi dòng đó là có? – loganfsmyth
Có, nếu tôi làm điều này 'listener.listen (80)' nó in dấu vết ngăn xếp và treo.Ngay cả với 'listener.on' lỗi ', ...' Có thể lỗi xảy ra trong trường hợp này không phải là lỗi Express và đây là lý do tại sao nó không xử lý. Nhưng đó chỉ là giả định. –