Mi aporte en el código
Archivo index.js
'use strict'
// Requerir el modulo de hapi (Framework)
const Hapi = require('@hapi/hapi')
// Requerir el plugin de hapi para servir archivos estaticos
const inert = require('@hapi/inert')
// Requerir el plugin de hapi para gestionar el motor de plantillas
const vision = require('@hapi/vision')
const path = require('path')
// Requerir archivo de rutas
const routes = require('./router')
// Configurar el servidor de nuestra aplicación. En un contenedor (Docker) si marca error colocar 0.0.0.0 (todos)
const server = Hapi.server({
port: process.env.PORT || 3000,
host: 'localhost',
// Definir propiedades generales para todas las rutas. (En este caso indico que las rutas que requieran archivos estáticos, se servirán desde la carpeta public)
routes: {
files: {
relativeTo: path.join(__dirname, 'public')
}
}
})
// Definicion de función para inicializar el proyecto. Intenamnete hay tareas asincronas
async function init() {
try {
// Registrar plugins de hapi para servir archivos estaticos
await server.register(inert)
// Registrar plugin para gestionar el motor de plantillas
await server.register(vision)
// Configurar nuestro motor de plantillas.
server.views({
engines: {
hbs: require('handlebars')
},
relativeTo: __dirname,
path: 'views',
layout: true,
layoutPath: 'layouts'
})
// Registrar archivo de rutas en la aplicación
server.route(routes)
// Arrancar el servidor de Hapi
await server.start()
console.log(`Servidor lanzado en: ${server.info.uri}`)
} catch (error) {
console.error(error)
// Salir de nodeJS con un código de error (1), 0 es un código de exito
process.exit(1)
}
}
// Inicializar el proyecto
init();
Archivo router.js
// Requerir modulos de controlador de ruta
const siteController = require('./controllers/site')
const userController = require('./controllers/user')
// Declarar conjunto de rutas y asociar su respectivo controlador de ruta
const routes = [
{
method: 'GET',
path: '/',
handler: siteController.index
},
{
method: 'GET',
path: '/register',
handler: userController.register
},
{
method: 'POST',
path: '/create-user',
handler: userController.createUser
},
{
// Ruta para servir archivos estáticos asociados (img/css/js)
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: '.',
redirectToSlash: true
}
}
}
];
module.exports = routes
Archivo userController.js
// Definición de controladores de ruta
function register(req, h) {
return h.view('register')
}
function createUser(req, h) {
console.log(req.payload)
return 'Usuario creado satisfactoriamente'
}
module.exports = {
register,
createUser
}
Archivo siteController.js
// Definición de controlaadores de ruta
function index(req, h) {
return h.view('index', {
title: 'Home'
})
}
module.exports = {
index
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?