NodersJS
Published in

NodersJS

Cómo empezar una API RESTful con hapi.js

Hapi Guy, usando el casco de hapijs para comunicarse con nuestra API
Cliente HTTP Insomnia

Instalando todo lo necesario

mkdir hapijs-noders  
cd hapijs-noders
npm init -y

“Houston: aquí localhost, cambio…”

const Hapi = require('hapi');const server = Hapi.server({
port: 3000,
host: 'localhost',
app: {}
});
const iniciarServer = async () => {
try {
await server.start();
console.log(`Servidor corriendo en: ${server.info.uri}`);
} catch (error) {
console.log('Error al iniciar el servidor Hapi');
}
};
iniciarServer();
Respuesta 404 de nuestro servidor 😓

Todos los caminos llegan a Roma: Routes

  • En nuestro archivo app.js.
  • En un plugin.
module.exports = {
name: 'ApiRoutes',
register: async (server, options) => {
server.route([
{
method: 'GET',
path: '/',
handler: async (req, res) => {
return 'Hola Noders!';
}
}
]);
}
}
const Hapi = require('hapi');
const routes = require("./routes"); //Agregamos esta línea
const server = Hapi.server({
port: 3000,
host: 'localhost',
app: {}
});
const iniciarServer = async () => {
try {
await server.register(routes); //Agregamos esta línea
await server.start();
console.log(`Servidor corriendo en: ${server.info.uri}`);
} catch (error) {
console.log('Error al iniciar el servidor Hapi');
}
};
iniciarServer();
Respuesta desde nuestro servidor Hapi 😸

Agregando nuevas rutas

GET con parámetros

{
method: 'GET',
path: '/usuarios/{nombre?}',
handler: async (req, res) => {
const nombre = (req.params.nombre) ? req.params.nombre : 'invitado';
return `Hola ${nombre}!`;
}
}
Respuesta de petición GET con parámetros

POST

{
method: 'POST',
path: '/usuarios',
handler: async (req, res) => {
const newUser = {
nombre: req.payload.nombre,
apellido: req.payload.apellido
};
return res.response({
datos: newUser
}).type('application/json');
}
}
Creación de una nueva petición en Insomnia
Información básica de la nueva petición
La nueva petición debe apuntar a http://localhost:3000/usuarios mediante POST
Selección del tipo de cuerpo de la petición
Agregando información al cuerpo de la petición
Respuesta desde nuestro servidor ante la petición POST 😸

PUT y DELETE

{
method: 'PUT',
path: '/usuarios/{id}',
handler: async (req, res) => {
const newUser = {
nombre: req.payload.nombre,
apellido: req.payload.apellido
};
return res.response({
datos: newUser,
mensaje: `Usuario ID: ${req.params.id} modificado exitósamente!`
}).type('application/json');
}
},
{
method: 'DELETE',
path: '/usuarios/{id}',
handler: async (req, res) => {
return res.response({
mensaje: `Usuario ID: ${req.params.id} eliminado exitósamente!`
}).type('application/json');
}
}

Esto recién comienza!

--

--

¿Por qué? Porque nos gusta.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Nicolás Avila

MS Audiologist. Clinical Informatics Manager at Clínica Alemana de Santiago. Father, Dog Lover, 8-Bit Appreciator & Synth Geek