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

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Node.js con Hapi

Curso de Node.js con Hapi

Adrián Estrada

Adrián Estrada

Logging con Good - Monitoreando el servidor

28/35
Recursos

El proceso de registrar los eventos que suceden internamente en nuestra aplicación, también conocido como logging, es un aspecto técnico bastante habitual en entornos de producción de la vida real.

Hapi incluye un método .log( args ) tanto en el objeto server, como en request y en response que nos permiten un registro muy básico de eventos; sin embargo, la práctica recomendada es hacer logging con un módulo adicional llamado Good y una dependencia para el manejo de transporters llamada good-console.

Al igual que hemos hecho antes, una vez instalado el paquete de Good, será necesario requerirlo y registrarlo debidamente en el script principal, pero en este caso lo haremos de una manera ligeramente diferente:

...
await server.register({
  'plugin': good,
  'options': {
    'reporters': {
      'console': [
        {
          'module': 'good-console'
        },
        'stdout' // --- salida estándard
      ]
    }
  }
})
...

Luego de configurado el paquete, la implementación es tan simple como ejecutar la misma instrucción server.log( '<etiqueta o tag>', <mensaje> ), donde <mensaje> puede ser una cadena de texto o un objeto. Recuerda que el método log también está disponible en los objetos request y response.

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Dado que los modulos ‘good’ y ‘good-console’ están deprecados se debe utilizar los modulos @hapi/good y @hapi/good-console y para utilizarlos se haría de la siguiente manera:

await server.register({
      plugin: require('@hapi/good'),
      options: {
        ops: {
          interval: 2000,
        },
        reporters: {
          myConsoleReporters: [
            {
              module: require('@hapi/good-console'),
            },
            'stdout',
          ],
        },
      },
    });

lo demás se utiliza igual server.log('TAG', 'Mensaje')

Por que no es tan recomendable hapi-pino?

Con la noticia de que el modulo fue pasado a obsoleto me incline a utilizar hapi-pino que esta indicado en la documentación oficial de hapi.
la implementación es mucho más sencilla que good y ofrece la posibilidad de configurarlo

link a doc oficial de hapi-pino.

la implementación queda así:

import pino from 'hapi-pino;
await server.register({
    plugin: pino,
    options: {
      prettyPrint: process.env.NODE_ENV !== 'production',
    },
  });

y en la documentación oficial presenta la forma de manejar el logger dentro de la aplicación, practicamente lo mismo que con good…

handler: async function (request, h) {
      // request.log is HAPI standard way of logging
      request.log(['a', 'b'], 'Request into hello world')

      // you can also use a pino instance, which will be faster
      request.logger.info('In handler %s', request.path)

      return 'hello world'
    }

  // also as a decorated API
  server.logger.info('another way for accessing it')

  // and through Hapi standard logging system
  server.log(['subsystem'], 'third way for accessing it')

Al intentar instalar Good me fije que muchas dependencias están obsoletas y las he actualizado y el package.json se ve así

"dependencies": {
    "@hapi/boom": "^9.1.0",
    "@hapi/good": "^9.0.0",
    "@hapi/good-console": "^9.0.0",
    "@hapi/hapi": "^19.1.1",
    "@hapi/inert": "^6.0.1",
    "@hapi/joi": "^17.1.1",
    "@hapi/vision": "^6.0.0",
    "bcrypt": "^4.0.1",
    "firebase-admin": "^8.11.0",
    "handlebars": "^4.7.6",
    "uuid": "^8.0.0"
  }

al realizar esto tuve un error en el archivo de rutas, el payload ahora se declara de esta forma.

options:{
        validate: {
            payload: Joi.object({
                name: Joi.string().required().min(3),
                email: Joi.string().email().required(),
                password: Joi.string().required().min(6)
            }),
          failAction: user.failValidation 
        }
    },

Ahora se incluye el Joi,object