Bienvenidos sean a este post, hoy nos centraremos en lo que indica el titulo.

Anuncios

Hasta ahora vimos varias formas de como Express nos permite manejar ciertos temas pero que sucede cuando no todo funciona como deberia? en ese caso entran en escena los errores que podemos manejar y mostrar, en este post mencionamos que el codigo base nos permite manipular el error 404 pero tambien podemos manipular otros tipos de errores y mostraserlo al usuario.

Anuncios

Como mencionamos en el post anterior para pasar a la siguiente funcion middleware usamos a next y para el caso de los errores pasamos el valor como argumento:

next(err)
Anuncios

Una vez que Express registra este error esquiva cualquier ruteo no erroneo restante e informa el error a los manejadores de errones en su lugar, pasemos a ver el manejador de errores en app.js ccreado por Express:

app.use(function(err, req, res, next) {

  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};


  res.status(err.status || 500);
  res.render('error');
});
Anuncios
Anuncios

Observen que esta funcion no solo toma los tres parametros que estuvimos utilizando en otras funciones sino que le agregamos a err el cual indica el tipo de error, a pesar de ser un error seguiremos usando el objeto res para enviar una respuesta al navegador, despues tenemos a res.status para establecer el codigo de estado de respuesta de HTTP y en este caso si no existe alguno le asignaremos el valor de 500 que establece un error interno del servidor o generico, pero en un ejemplo visto en este post utilizamos a writeHead para establecer el codigo de estado y el tipo MIME de la respuesta del error, para ese caso fue solamente el error 404.

Anuncios
Nota:
MIME significa Multipurpose Internet Mail Extension para indicar el tipo de archivo en internet.
Anuncios

Lo siguiente sera utilizar a res.render para enviar la respuesta y para ello toma la informacion y la renderiza a traves de un template (o plantilla), en este caso usamos al template denominado como error y corresponde al archivo error.hbs en el directorio views, el codigo generado predeterminadamente es:

<h1>{{message}}</h1>
<h2>{{error.status}}</h2>
<pre>{{error.stack}}</pre>
Anuncios

La marcacion {{valor}} es utilizada para reemplazar en el template con el valor de la expresion o variable, los valores referenciados en el template, message y status, son los provistos por establecer a res.locals en el bloque de app.js pero basta de teoria vamos a verlo en accion y para ello debemos ir al archivo index.js en el directorio router y agregaremos el siguiente bloque de codigo antes de exportar el objeto router:

router.get('/error', function(req, res, next) {
        next({
                status: 404,
                message: "Error de Prueba"
        });
});
Anuncios
Anuncios

Aqui le pasamos la direccion /error para que la rutee pero en este caso en el next le pasamos los datos que son de error, primero el estado y luego el mensaje, y si bien este es un ejemplo simple aqui podemos agregar mas accciones, tales como un error mas detallado asi como extraer informacion de otra fuente para hacerlo mas especifico, pero como solo queremos verlo en accion lo hacemos bien simple, veamos que pasa al pasar a /error en la URL

Anuncios

Si bien este es un caso falso de error y paso los datos que le informamos observen que asumio como si hubieramos usado a next(err) y utilizo el template encargado de manejar errores, como pueden ver de una manera muy simple podemos crear una forma practica de manejar nuestros errores, veamos como quedo el archivo index.js:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.get('/error', function(req, res, next) {
        next({
                status: 404,
                message: "Error de Prueba"
        });
});

module.exports = router;
Anuncios

Ya vimos toda la teoria relacionada a nuestra primera aplicacion generada automaticamente por Express, en el proximo post veremos como crear la aplicacion en base a este codigo generado automaticamente.

Anuncios

En resumen, hoy hemos visto como manejar errores, cuales son las encargados de manejarlos, como lo hacen, para ver a traves de un ejemplo como reutiliza a este template, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50