# Construyendo un servidor básico con Hapi.js

Logo Hapi

Antes de empezar a tirar lineas de código creo que es mejor saber que es [Hapi](https://hapijs.com/), este maravilloso Frameworks es uno de los más utilizados en el ecosistema de NodeJS, fue creado dentro de Walmart por Eran Hammer, quien también creó la especificación OAuth, Hammer siendo líder del equipo de Mobile en Walmart se topó con un problema, el alto tráfico del sitio web los días cercanos al Black Friday.

Es por eso que junto a su equipo deciden crear [Hapi](https://hapijs.com/), como middleware de express, ya que este no les ofrecía una solución a los problemas que se estaban enfrentando. Luego de ir probando diferentes combinaciones de soluciones deciden crear todo el framework desde cero sobre la base de “ Mejor configuración que código”.

Hapi está diseñado pensando en aplicativos modularizados de grandes dimensiones. Contempla la separación de la configuración de la lógica del negocio y utiliza su propia forma de realizar las cosas. Este framework es utilizado para crear, Aplicativos Web, APIs REST, APIs en GRaphQL, Proxies HTTP, e integrador de múltiples Backends, entre otras cosas más.

El *servidor* es la unidad básica y principal de las aplicaciones web, es por eso que te voy a mostrar cómo montar tu propio servidor web en cuestiones de minutos con este frameworks.

Crearemos y trabajaremos sobre un archivo `index.js` en el cual ejecutaremos todo el código de esta aplicación. Para crear un servidor con **Hapi**, sólo basta con requerir el módulo y luego ejecutar la función *server*:

Luego es necesario definir los puntos de interacción mediante una *ruta*:

La propiedad “*method”* indica si el request esperado es de tipo *GET* o *POST*, y el *path* es la url relativa asociada a esta ruta definida. El *handler* es la función que manejará la respuesta que se enviará al navegador.

El objeto “**h”**, es el segundo argumento que recibe la función *handler* de una ruta definida. Este contiene una colección de utilidades y propiedad relativas a la información de respuesta.

Métodos mas básicos del objeto “**h**”:

*   h.**response**(): “Lo que hace es crear un objeto de respuesta”
*   h.**redirect**(): “En este caso direccionamiento de una petición”.

El objeto **Response** (creado con el método *h.response*), permite definir las propiedades de la respuesta. A través de este objeto se pueden especificar las cabeceras, tipo de documento y código de respuesta devuelto al cliente, mediante los métodos: .header(), .type() y .code()

También lo que podemos realizar es un `try` and `catch` para poder controlar los errores, y lanzar un `console.log` mostrando un mensaje de que el servidor esta funcionando.

Una vez que terminemos con todo esto, ejecutaremos en una terminal comando `node index.js` el mismo nos mostrara un mensaje por consola diciendo ***“Servidor lanzado en localhost:3000”***, si navegamos a esa ruta deberíamos poder ver el mensaje **“Hola mundo!”**, y si entramos a la ruta ***localhost:3000/redirect***, nos llevara a [***www.google.com***.](http://www.google.com.)

#### Si el articulo te gusto o te pareció interesante por favor ayúdame con 👏 🤓 Puedes seguirme en [Twitter](https://twitter.com/suarez__imanol) o encontrarme en [GitHub](https://github.com/FranciscoImanolSuarez) visitando mi sitio web.

[**Francisco Imanol Suarez on about.me**  
*I am a web developer, student, and photographer in Trelew, Argentina. Read my articles.*about.me](https://about.me/franciscoimanol "https://about.me/franciscoimanol")[](https://about.me/franciscoimanol)
