Ho esaminato la documentazione di Express e lo the part describing error handling è completamente opaco per me.Come gestire le eccezioni di codice in node.js?
Ho pensato che il app
a cui si riferiscono è un'istanza createServer()
, giusto? Ma non ho idea di come impedire a node.js di far esplodere il processo dell'applicazione quando si verifica un'eccezione durante la gestione di una richiesta.
Non ho bisogno di niente di speciale; Voglio solo restituire uno stato di 500, più una risposta altrimenti vuota, ogni volta che c'è un'eccezione. Il processo del nodo non deve terminare solo perché da qualche parte c'era un'eccezione non rilevata.
Esiste un semplice esempio di come ottenere ciò?
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);
si blocca l'intera applicazione, producendo 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)
'solo perché ci fu un'eccezione non rilevata somewhere.' Il processo *** *** saranno morire se c'è un'eccezione non rilevata * *. Se non si desidera che si interrompa quando si verifica un'eccezione, rilevare l'eccezione e restituire l'errore 500. – Chad
Potresti essere interessato al modo non espresso: http://stackoverflow.com/questions/4213351/make-node-js-not-exit-on-error – Matt
Eccellente, grazie mille @Matt! – user124114