Anuncios

Bienvenidos sean a este post, hoy veremos una parte que nos establece Express.

Anuncios
Anuncios

Al final del post anterior mencionamos algunas instrucciones que se encargaban de algunos aspectos de la publicacion base y a este lo denominamos como Middleware y estas estan envueltas en el procesamiento de las solicitudes y el envio de los resultados a los clientes, a su vez tiene acceso a los objetos request y response y se espera que este procese los datos y quizas pueda agregar datos a estos dos objetos, por citar un ejemplo el parser de cookie analiza los headers de las cookies para almacenarlos en el objeto request las cookies enviadas por el navegador, vamos a analizar el siguiente bloque de codigo del archivo app.js:

app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});
Anuncios

Este es un ejemplo de lo hablado anteriormente dado que este se encargara de manipular el mitico error 404, el documento solicitado no fue encontrado, y notificarle de alguna manera al usuario que no se pudo completar esta solicitud, pero antes de comentar como manejar los errores debemos ver como trabaja el middleware.

Anuncios
Nota:
Middleware implica que el software se ejecuta en el medio de unos pasos encadenados de procesamiento.
Anuncios

Los metodos middleware toman tres argumentos:

  • request
  • response
  • next
Anuncios
Anuncios

Los dos primeros trabajan directamente con los objetos del mismo nombre respectivamente pero el ultimo es una funcion callback que se encarga de manejar el resultado cuando el ciclo request-response finaliza, y tambien enviar notificaciones de error siendo esto una cosa criticable pero esto es debido a que Express fue creado antes de la existencia de las promesas y funciones asincronicas, por lo tanto su diseño esta entrelazado con el patron de la funcion callback pero esto no quita que podamos usar funciones asincronicas pero debemos integrarlas con las funciones callback que Express provee.

Anuncios

La arquitectura general esta pensada para que las solicitudes entrantes sean manejadas por cero o mas funcion middleware, despues por una funcion router la cual enviara una respuesta, aqui las funciones middleware llaman a next, habitualmente no se pasa argumentos al llamarla, pero en caso de encontrar algun error lo pasaremos con el llamado de la siguiente manera:

next(err)
Anuncios
Anuncios

Para cada funcion middleware que ejecutamos tenemos, en teoria, una gran cantidad de otras funciones middleware que ya fueron ejecutadas, y otras tantas que aun se encuentran corriendo, por esta razon es necesaria la funcion next para pasar el control a la siguiente funcion middleware, pero es necesario llamar a la funcion next? bueno si pero hay una excepcion donde no es necesario, en el resto de los casos el request HTTP se colgara porque no se devuelve una respuesta, veamos un caso hipotetico donde no es necesario:

app.get('/hello', function(req, res) { 
    res.send('Hello World!'); 
}); 
Anuncios
Anuncios

En este caso en lugar de enviar el next le pasamos un res.send, esto es asi porque la respuesta HTTP es enviada para ciertas funciones en el objeto response, tales como res.send o res.render, siendo este el metodo correcto para acabar con el ciclo de solicitud-respuesta, mediante el envio de una respuesta (res.send) a la solicitud, pero si no llamamos a res.send o next la solicitud nunca recibe una respuesta y esto hara que el cliente se cuelgue, con esto podemos decir que middleware hace alguna de las siguientes acciones:

  • Ejecuta su propia logica establecida
  • Modifica los objetos response y request mediante los metodos body-parser y cookie-parser
  • Llama a la funcion next para pasar a la siguiente funcion middleware
  • Envia una respuesta para finalizar el ciclo.
Anuncios

Para ir finalizando el orden de la ejecucion de las funciones middleware dependen del orden que fueron agregadas al objeto app, siendo la primera funcion agregada la que ejecutamos primero y asi sucesivamente.

Anuncios

En resumen, hoy hemos visto el concepto de middleware, que son, como se componen, como trabaja, porque trabaja de esa forma, asi como se encarga de manejar el ciclo de solicitud-respuesta, 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