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

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

23/35
Recursos

En esta clase agregaremos la funcionalidad de marcado de las respuestas como correctas, para esto nos apoyaremos en otro helper de handlebars por lo que haremos primero una refactorización creando un archivo que contenga todos los helpers en una función que retornará el objeto handlebars personalizado.

El tag {#if}{/if} de handlebars no soporte comparar múltiples condiciones, por lo que tendremos que crear un helper de tipo método de bloque, que tiene una estructura parecida a la siguiente:

handlebars.registerHelper('nombreHelper', ( params..., options ) => {
	if( <condición> ) {
		// --- renderiza el contenido
		return options.fn( this )
	}
	// --- no renderiza el contenido
	return options.inverse( this )
})

Un método de bloque es en esencia un tag personalizado en handlebars, de tipo bloque {#miHelper} ... {/miHelper}, similar a {#if}{/if}, {#with}{/with}, {#each}{/each}, etc.

Aportes 7

Preguntas 1

Ordenar por:

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

que interesante forma de usar el module.exports 😮

Esas subidas de contexto me han resultado algo confusas, se sube de contexto respecto a que?

Si la respuesta tiene saltos de linea y no se vea todo junto 😃

<p class="card-text" style=" white-space: pre-line;">
    {{answer.text}}
</p> 

No entiendo porqué poner el contexto with user, si lo omitimos fuciona igual, sólo hay que hacer una modificación en las subidas de contexto.

<div class="col-sm text-right">
            {{#ifEquals ../question.owner.email ../user.email}}
              <a href="" class="btn btn-primary" role="button">Elegir respuesta correcta</a>
            {{/ifEquals}}
          
        </div>
'use strict'

const handlebars = require('handlebars')

function registerHelpers() {
    handlebars.registerHelper('answerNumber', (answers) =>{
        const keys = Object.keys(answers)
        return keys.length
    })

    handlebars.registerHelper('ifEquals', (a, b, options) =>{
        if (a === b) {
            return options.fn(this)
        }
        
        return options.inverse(this)
    })
    return handlebars
}

module.exports = registerHelpers()

Tambien podriamos hacer esto

"use strict";
const HANDELBARS = require('handlebars');

const Helpers = (() => {
    HANDELBARS.registerHelper("answerNumber", (answer) => Object.keys(answer).length) +1000;
    return HANDELBARS;
})(HANDELBARS);

module.exports = Helpers;```


de esta manera podríamos registrar cualquier **helper** que se necesite.