Revisé la documentación de Express, y the part describing error handling es completamente opaco para mí.¿Cómo manejar las excepciones de código en node.js?
Pensé que el app
al que se refieren es una instancia createServer()
, ¿verdad? Pero no tengo ni idea de cómo detener node.js de explotar el proceso de la aplicación cuando se produce una excepción durante el manejo de una solicitud.
No necesito nada realmente sofisticado; Solo quiero devolver un estado de 500, más una respuesta por lo demás vacía, siempre que haya una excepción. El proceso de nodo no debe terminar solo porque hubo una excepción no detectada en alguna parte.
¿Hay un ejemplo simple de cómo lograr esto?
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);
se bloquea la aplicación completa, la producción de rastreo
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)
'simplemente porque no había una excepción no capturada somewhere.' El proceso *** *** va a morir si hay un * * excepción no detectada. Si no desea que finalice cuando ocurre una excepción, capture la excepción y devuelva el error 500. – Chad
Puede que le interese la forma no expresa: http://stackoverflow.com/questions/4213351/make-node-js-not-exit-on-error – Matt
Excelente, muchas gracias @Matt! – user124114