trabajar - promises javascript w3schools
Uso de promesas: rastreo de la pila de registro en el controlador de fallas (1)
Soy bastante nuevo en nodejs, así que explicaré con más detalle lo que estoy tratando de hacer.
Tengo un servidor web. Si una solicitud falla, quiero registrar el seguimiento de la pila de esa excepción, pero entregar una página de error y no bloquear el servidor.
Como ejemplo, la función que maneja las solicitudes:
var Q = require(''q'');
var requestHandler = function () {
// Here I get the data etc. that was requested. As this is not important, just a dummy here
Q.resolve()
// Now I answer the request
.then(function (data) {
// Dummy Code representing the sending of a response
console.log(''sending response …'');
console.log(''oh no! an exception'');
// Now an Exception occurs
throw new Error(''You did something wrong!'');
})
// If there was any error, show the error page instead
.fail(function (err) {
// Dummy Code representing the sending of the error page
console.log(''sending error page'');
// Additionally I want to write the error into a log file
console.error(''You had an error: '', err);
})
// If there was an error in the .fail-handler, I deserve the server to crash
.done();
};
// A request comes in, I want to call my handler
requestHandler();
La salida de la consola:
sending response …
oh no! an exception
sending error page
You had an error: [Error: You did something wrong!]
No puedo ver una forma de acceder al seguimiento de pila. Pero cuando lanzo una excepción en el controlador de errores (o simplemente omito el controlador de errores completo), obtengo un seguimiento de la pila en la consola (pero tengo que reiniciar el servidor).
Así que supongo que mi pregunta es:
¿Cómo accedo al seguimiento de la pila en un controlador de errores de promesa?
EDITAR : Cualquier consejo sobre cómo mejorar la explicación son bienvenidos, por supuesto. Si no me aclaré, por favor hágamelo saber.
Registrar el objeto de error no imprimirá el seguimiento de la pila del error. Necesitas pedirlo específicamente:
console.error(''You had an error: '', err.stack);