Introducción

1

Qué necesitas para este curso y qué aprenderás sobre Node.js con Hapi

2

Conceptos principales de hapi y creación de nuestro primer servidor

3

Breve historia y estado actual

Creando un sitio básico con Hapi

4

El objeto h, response y sus herramientas

5

Uso de plugins - Contenido estático

6

Plantillas con Handlebars

7

Renderizado de vistas - Layout y template del home

8

Recibiendo parámetros en una ruta POST - Creación del registro

9

Definir una mejor estructura con buenas prácticas en Hapi

10

Validando la información - Implementando Joi

11

Introducción a Firebase

12

Creando un modelo y guardando en firebase

13

Implementando el login y validación del usuario

14

Autenticación de usuarios - Cookies y estado

15

Manejando errores

16

Visualización de errores

17

Controlar el error 404 en inert y el error de validación

18

Repaso - Creación del modelo y controlador para preguntas

19

Repaso - Creación de las rutas para crear preguntas

20

Listar las últimas preguntas en el home

Aplicacion de conceptos avanzados

21

Enrutamiento avanzado - visualizando una pregunta

22

Enrutamiento avanzado - respondiendo una pregunta

23

Generando la lógica de la plantilla según si es creador o contribuidor

24

Métodos de servidor - respuesta correcta

25

Usando métodos de servidor

26

Manejo del caché - Agregando el home al caché

27

Procesamiento de archivos - Aceptando imágenes

28

Logging con Good - Monitoreando el servidor

29

Creación de plugins - Teoría

30

Creación de plugins - Implementando un API REST

31

Estrategías de autenticación - Asegurando el API REST

32

Seguridad básica - Asegurando el servidor contra CSRF

33

Seguridad básica - Asegurando el servidor contra XSS

Herramientas de desarrollo

34

Depuración del proyecto

35

Ecosistema de Hapi

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manejando errores

15/35
Recursos

Para el manejo general de errores con Hapi usamos la instrucción process.on( '<tipo de error>', ( <error> ) => { <callback> } ) en el script principal. En el callback de la función, error devuelve un objeto con los detalles del error capturado. Los tipos de errores que vamos a manejar en el proyecto son: unhandledRejection y unhandledException. Estos dos tipos de errores son los más comunes y los que se aconseja manejar como mínimo en cualquier aplicación.

Luego definimos el método failActions en las rutas en las que haremos las validaciones. Este método hará referencia a su vez al método del controlador en el cual se procesará el manejo de los errores.

Para mostrar los mensajes de error en la aplicación de una manera más amigable y controlada, usaremos el módulo boom, que está integrado en el core de Hapi.

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

el modulo de boom esta deprecado, pueden usar @hapi/boom

En cuanto a excepciones no manejadas el error que lanza node y por el que hay que estar pendientes es:
“uncaughtException”

Queda así:

process.on('uncaughtException', (err) => {
  console.error('Uncaught Exception', err);
  process.exit(1);
});

Me gustaría saber si como estoy escribiendo mis controladores son 100% equivalentes a la manera en que lo esta explicando el profesor.

site.js

'use strict'

module.exports = {
	home: (request, h) => {
		return h.view('index', {
			title: 'Home',
			user: request.state.user
		});
	},
	register: function(request, h) {
		return h.view('register', {
			title: 'Register',
			user: request.state.user
		});
	},
	login: function(request, h) {
		return h.view('login', {
			title: 'Login',
			user: request.state.user
		});
	},
	logout: function(request, h) {
		return h.redirect('/login').unstate('user');
	}
};

user.js

'use strict'

const Boom = require('boom');
const { users } = require('../models/index');

module.exports = {
	createUser: async function(request, h) {
		let result = null;

		try {
			result = await users.create(request.payload);
		} catch (error) {
			console.error(error);
			return h.response('Problemas creando el usuario!').code(500);
		}

		return h.response(`Usuario creado, ID: ${result}`);
	},
	validateUser: async function(request, h) {
		let result = null;

		try {
			result = await users.validate(request.payload);

			if(!result) {
				return h.response('Email y/o contraseña incorrecta').code(401);
			}
		} catch (error) {
			console.error(error);
			return h.response('Problemas validando el usuario!').code(500);
		}

		return h.redirect('/').state('user', {
			name: result.name,
			email: result.email
		});
	},
	failValidation: function(request, h, error) {
		Boom.badRequest('Falló la validación', request.payload);
	}
};

¿Que beneficios trae usar los bloques {{#with variable}} en vez del tradicional {{#if variable}}?

¯\_(ツ)_/¯