post thumbnail

Node.js y Express: Middleware

Publicado Por: Oscar González, El 14/10/2013


Detalles del Curso:

Dificultad: Novato

Duración: 10 min


En Node.js el middleware es todo lo que ocurre desde que sale una solicitud en lado del cliente hasta que llega a nuestra lógica de la ruta en el servidor. Hoy voy a estar profundizando en este tema para una mejor comprensión.


Configuración

En todo framework de desarrollo siempre hay un poco de configuración que podemos hacer para trabajar. Cuando hemos usado app.set estamos configurando Node para algún fin.

Algunos comandos de configuración que podemos usar que hasta ahora no se han mencionado son los siguientes:

// app.js

app.set('view cache', true);

Este comando habilita el cacheo de las vistas, esto no nos convendría en un habiente de desarrollo si en uno de producción.

Cuando estas variables de configuración solo aceptan valores "true" o "false" podemos hacer uso del método enable o disable.

app.enable('view cache');

Y esto sería exactamente igual al bloque de código anterior.

Hasta ahora solo hemos utilizado propiedades que son propias de Express, pero también podemos usar set para asignar cualquier propiedad inventada por nosotros:

app.set('color themes', true);

Esta propiedad que acabo de inventar podría ser para mostrar distintos colores en mi interfaz dependiendo de la fecha actual, por ejemplo.


Middleware

El framework Express esta construido sobre Connect, otro framework desarrollado por Sencha Labs que permite el uso de middleware en Node.js.

bodyParser

Cuando hemos usado app.use(express.bodyParser()); estamos haciendo uso del middleware. Con esta linea de código decimos que antes de que llegue el mensaje enviado desde el cliente hasta nuestra ruta, sea analizado el contenido del body para poder ser utilizado.

methodOverride

Otro middleware que podemos utilizar es app.use(express.methodOverride());. Los browser como tal no pueden hacer requests de tipo PUT o DELETE, solo GET y POST. con 'express.methodOverride' hacemos posible el soporte de requests tipo PUT o DELETE agregando un campo de tipo 'hidden' a nuestro formulario para que pueda ser manejada por nuestras rutas de put o delete.

Por ejemplo:

Nuestro formulario debe tener un campo como este:

// form.html

<form action='/updateUser'> ...
  <input type="hidden" name="_method" value="put" />
</form>

Para que pueda ser llamada la siguiente ruta en el servidor:

app.put('/updateUser', function (req, res, next) {
  // Codigo aqui
});

static

También tenemos un middleware llamado static. Este permite el envío de archivos estáticos desde el servidor, como css, javascripts, imágenes, etc. Se invoca mendiante la siguiente linea de código: app.use(express.static(__dirname + 'public'));, si tuviéramos una carpeta dentro del proyecto llamada "public" entonces Node buscaría todos nuestros archivos estáticos ahí.

Esta propiedad debería ser llamada de última en nuestra lista de propiedades ("app.use") ya que podría sobreescribir alguna de nuestras rutas. Por ejemplo, si alguna de nuestras rutas se llama "public/archivo.css" y tenemos también un archivo en esa ruta entonces el archivo se descargaría automáticamente desde el servidor y nunca se ejecutaría el código de nuestra ruta, es por eso que debe ir al final, porque nosotros queremos que tenga prioridad la lógica de ruta.

Otros middleware

En el repositorio de github de Connect podemos encontrar los otros plugins de middleware que podemos utilizar. Aquí dejo la lista completa:

  • basicAuth
  • bodyParser
  • compress
  • cookieParser
  • cookieSession
  • csrf
  • directory
  • errorHandler
  • favicon
  • json
  • limit
  • logger
  • methodOverride
  • multipart
  • urlencoded
  • query
  • responseTime
  • session
  • static
  • staticCache
  • subdomains
  • vhost

No dudes en revisar la funcionalidad de cada uno, podrían ser muy útiles y ahorrar tiempo valioso.


Conclusión

En este capitulo estuvimos hablando de los que es el middleware y como utilizarlo en Node.js y Express, espero que les haya sido útil esta información.

Como siempre cualquier duda que surja con gusto podré aclararla si la dejas en los comentarios (más abajo)

Saludos y hasta la próxima.


¿Te ha gustado esta publicación?

Compártela:

Por Oscar González

Conoce más sobre este autor aquí


comments powered by Disqus