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

Repaso - Creación de las rutas para crear preguntas

19/35
Recursos

Hasta ahora hemos repasado cómo definir el modelo y crear la función en el controlador para el manejo de preguntas de nuestro proyecto. En esta clase vamos a difinir las rutas y enlazarlas con las vista para que todo trabaje en conjunto.

  • En el action del formulario que definimos en la vista con handlebars indicamos la ruta a la cual se va a dirigir el navegador al hacer clic en el botón en Crear pregunta.

  • Incorporamos el condicional para el manejo de errores en el archivo de handlebars de la vista.

  • Agregamos la url en el archivo layout que enlazará a la ruta que definiremos a continuación para hacer las preguntas.

  • Creamos la función necesaria en el controlador para hacer el llamado a la vista.

  • Definimos las nuevas rutas: la de creación de la pregunta y la que recibirá los datos de formulario para crear nuevas preguntas, es acá donde definimos las validaciones que se aplicarán a los datos con Joi.

  • Agregamos la ruta en la función de validación de urls.

Aportes 8

Preguntas 0

Ordenar por:

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

Ojo hay un error en el ask.hbs, el form tiene un enctype=“multipart/form-data” que no es compatible. Recomiendo eliminar esa propiedad

<form method="POST" action="/create-question">

Acordarse de deconstruir la data antes de setearla si no da error:

async create(data, user) {
        const ask = {
            ...data
        }

        ask.owner = user
        const question = this.collection.push()
        question.set(ask)

        return question.key
    }

Estupenda clase instructor Adrián, para aquellas personas que tienen problemas al crear le preguntas sigan estos pasos:

  1. Revisar la etiqueta <form> del archivo ask.hbs, nos fijaremos en que en el atributo actions= “” este la dirección que queremos “create-question” y eliminamos todo el atributo enctype=””
  2. Nos fijamos en el archivo questions.js que está en la carpeta models, allí tenemos que manejar el parámetro data para que sea reconocido como JSON, tenemos dos opciones:
     
    a. Descontruir data como nos indica el compañero AlbertoDSosa:
async create (data, user) {
        const inquiry = {
            ...data
        }
        inquiry.owner = user
        const questions = this.collection.push()
        questions.set(inquiry)

        return questions.key
    }

b. Añadir el JSON parse

async create (data, user) {
        data = JSON.parse(JSON.stringify(data));
        data.owner = user
        const questions = this.collection.push()
        questions.set(data)

        return questions.key
    }

Espero que les sea de utilidad estos datos

Exelente curso hasta ahora

'use strict'

class Quiestions {
    constructor(db) {
        this.db = db
        this.ref = this.db.ref('/')
        this.collection = this.ref.child('questions')
    }

    async create (data, user) {
        const ask = {
            ...data
        }
        ask.owner = user
        const question = this.collection.push()
        question.set(ask)

        return question.key
    }
}

module.exports = Quiestions

No se, pero llamarme tikistmikis, la función failValidation tiene tres templates dos del user y uno de questions, pero está en el controlador del user, o ponemos uno similar en question o sacamos todos del user para ponerlo fuera como una utilidad de todos los formularios, es lo que yo haría, …

async function failValidation(request, h, error) {
    const templates = {
            '/create-question': 'question'
        }
        // return Boom.badRequest('Falló la validación', request.payload)
    console.log('PATH: ', request.path);
    return h.view(templates[request.path], {
        title: 'Error de Validación',
        error: 'Por favor complete los campos requeridos'
    }).code(400).takeover(); // se salta el error (400, del boom) con el takeover() y retorna la vista
}

Hasta ahora va genial el curso…

Hola a todos, Me aparce un error 415, “message”: "Unsupported Media Type"
Alguna idea de que me puede estar pasando?, de antemano gracias