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 7

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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:
鈥渦ncaughtException鈥

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);
	}
};

Interesante este art铆culo acerca de manejar los errores no controlados
https://medium.com/dailyjs/how-to-prevent-your-node-js-process-from-crashing-5d40247b8ab2

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

炉\锛(銉)锛/炉