Tôi đã xem tài liệu về Express và the part describing error handling hoàn toàn không rõ ràng đối với tôi.Làm thế nào để xử lý các ngoại lệ mã trong node.js?
Tôi đã tìm được app
chúng đang đề cập đến là một phiên bản createServer()
, phải không? Nhưng tôi không có đầu mối làm thế nào để ngăn chặn node.js từ thổi lên quá trình ứng dụng khi một ngoại lệ xảy ra trong khi xử lý một yêu cầu.
Tôi không cần bất cứ điều gì ưa thích thực sự; Tôi chỉ muốn trả lại trạng thái 500, cộng với một phản hồi trống rỗng, bất cứ khi nào có ngoại lệ. Quá trình nút không được chấm dứt chỉ vì có một ngoại lệ chưa được bắt đầu ở đâu đó.
Có một ví dụ đơn giản về cách đạt được điều này không?
var express = require('express');
var http = require('http');
var app = express.createServer();
app.get('/', function(req, res){
console.log("debug", "calling")
var options = {
host: 'www.google.com',
port: 80,
path: "/"
};
http.get(options, function(response) {
response.on("data", function(chunk) {
console.log("data: " + chunk);
chunk.call(); // no such method; throws here
});
}).on('error', function(e) {
console.log("error connecting" + e.message);
});
});
app.configure(function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.listen(3000);
treo toàn bộ ứng dụng, sản xuất traceback
mypath/tst.js:16
chunk.call(); // no such method; throws here
^TypeError: Object ... has no method 'call'
at IncomingMessage.<anonymous> (/Library/WebServer/Documents/discovery/tst.js:16:18)
at IncomingMessage.emit (events.js:67:17)
at HTTPParser.onBody (http.js:115:23)
at Socket.ondata (http.js:1150:24)
at TCP.onread (net.js:374:27)
'chỉ vì có một ngoại lệ uncaught somewhere.' Quá trình này *** sẽ *** chết nếu có một * uncaught * ngoại lệ. Nếu bạn không muốn nó chấm dứt khi một ngoại lệ xảy ra, hãy nắm bắt ngoại lệ và trả về lỗi 500. – Chad
Bạn có thể quan tâm đến cách không thể hiện: http://stackoverflow.com/questions/4213351/make-node-js-not-exit-on-error – Matt
Tuyệt vời, cảm ơn rất nhiều @Matt! – user124114