Tôi bắt đầu làm việc với Express JS và đã gặp sự cố. Tôi không thể tìm ra cách thích hợp để xử lý lỗi.Cách xử lý đúng lỗi trong Express?
Ví dụ: tôi có API dịch vụ web phục vụ đối tượng được gọi là "sự kiện". Tôi muốn trả lại một chuỗi đơn giản "không thể tìm thấy sự kiện" khi người dùng gửi id sự kiện không được tìm thấy. Đây là cách tôi đang cấu trúc mã của tôi:
app.get('/event/:id', function(req, res, next) {
if (req.params.id != 1) {
next(new Error('cannot find event ' + req.params.id));
}
req.send('event found!');
});
Khi tôi gửi một id khác hơn 1, Node treo với kết quả như sau:
http.js:527
throw new Error("Can't set headers after they are sent.");
^
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/usr/local/kayak/node_modules/express/node_modules/connect/lib/patch.js:62:20)
at /usr/local/kayak/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js:72:19
at [object Object].<anonymous> (fs.js:107:5)
at [object Object].emit (events.js:61:17)
at afterRead (fs.js:878:12)
at wrapper (fs.js:245:17)
Từ những gì tôi có thể nói bằng cách sử dụng trình gỡ lỗi node.js , việc thực thi khối mã tiếp tục sau khi next()
được gọi, có nghĩa là req.send('event found!')
sẽ cố gắng chạy. Tôi không muốn điều này xảy ra.
Cách giải quyết duy nhất mà tôi thấy là chỉ cần ném một new Error()
thay vì "tiếp theo", nhưng kết quả này trong trang lỗi HTML Express mặc định được tạo. Tôi muốn kiểm soát nhiều hơn thế.
Tôi đã dành thời gian để đọc qua các tài liệu Express của error handling section, nhưng tôi không thể hiểu được nó.
Đó bày tỏ tài liệu trong liên kết là khá nghèo mặc dù.Nó thậm chí không đề cập đến cách bạn được cho là đúng cách ném một lỗi, hoặc phiên bản thể hiện của nó hợp lệ cho. – UpTheCreek
Đó là liên kết cho Express 3.x, nếu bạn muốn biết thêm về xử lý lỗi trong 2.x thanh toán liên kết này: http://expressjs.com/2x/guide.html#error-handling – alessioalex
Cảm ơn, điều đó rất hữu ích. – UpTheCreek