Una alternativa: https://www.npmjs.com/package/express-boom
Introducción
Introducción al curso y prerequisitos del curso
¿Qué es GraphQL?
Conceptos básicos
Schema y types
Queries y Resolvers
Sirviendo el API en la web
Custom Types
Argumentos
Configuración de base de datos
Integrando una base de datos
Mutations e Inputs
Repaso - Creando el tipo Estudiante
Nested Types
Resolver de tipos
Errores
Conceptos avanzados
Alias y fragments
Variables
Enums
Interfaces - Tipo Monitor
Directivas
Unions
Consumiendo el API
Preparando API para producción
HTTP requests
Clientes de GraphQL
Consumiendo el API desde un frontend simple
Cierre del curso
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Si sucede un error al momento de realizar una petición GraphQL nos va a retornar un objeto llamado errors
que contendrá la información del error y su mensaje. Podemos configurar el mensaje que le retorne al usuario simplemente con una función que lance un error con el mensaje que queramos.
Aportes 12
Preguntas 3
Una alternativa: https://www.npmjs.com/package/express-boom
hasta aquí he podido entender la mayoría de las cosas…
exelente profesor, deberian usarlo mas, solo una critica constructiva creo que deberia hablar un poco mas rapido a 1.25x se siente muy bien el paso del curso.
del resto muy buena la explicacion
Muy Buen Profesor de verdad
'use strict'
function errorHandler(error) {
console.error(error)
throw new Error('Fallo en la operacion del servidor')
}
module.exports = errorHandler
'use strict'
function errorHandler(err){
console.err(err);
throw new Error('Fallo en la operacion');
}
module.exports = errorHandler;
Maneja los errores con este funcion…
Las inconsistencias en los esquemas son errores que debemos de tener cuidado de evitar. Nos impideran manejar la información de manera correcta.
NO es buena practica devolverle errores técnicos a los usuarios. Tienen que ser errores amigables 🦄.
Creamos ‘lib/errorHandler.js’:
function errorHandler (error) {
console.log(error)
throw new Error('Fallo en la operación del servidor');
}
module.exports = errorHandler;
Y los usamos en todos los archivos donde usábamos console.error(error)
const errorHandler = require('./errorHandler')
Excelente, muy sencilla la explicación
'use strict'
function errorHandler(error) {
console.error(error)
throw new Error('Fabllo en la operacion del servidor')
}
module.exports = errorHandler
Si hubiera sido bueno que explicara cómo contolar los errores propios de los campos obligatorios. Por ejemplo, si el title es obligatorio para crear un curso y no se envía.
mutation {
createCourse(input: {
description: "Descripcion 4", topic: "diseño" }) {
_id
title
description
}
}
{
"error": {
"errors": [
{
"message": "Field \"CourseInput.title\" of required type \"String!\" was not provided.",
"locations": [
{
"line": 2,
"column": 23
}
]
}
]
}
}
Mi consulta es como controlas los errores para el Frontend ERROR de permiso error de validación de un campo que solo requiere 4 caracteres, etc
Excelente cierre de bloque!!
Hola a todos… me quedé con una duda. El error que presenta GraphQL al insertar el Course no es de la inserción propiamente tal, de hecho el curso se inserta. El error es al desplegar el resultado, porque necesita desplegar un campo que supuestamente debe existir pero que quedó nulo.
Ahora, si ejecutamos el mutation de esta forma:
mutation {
createCourse(input: {
description: "created to be deleted"
topic: "oJ^"
}){
_id
}
}
No hay ningún problema aparente. El mensaje devuelto por GraphQL fue limpio:
{
"data": {
"createCourse": {
"_id": "5f7cb61decd23018eb90cd84"
}
}
}
Ni tampoco se gatilló un error en el código del mutation.
Sigamos… si ejecuto el query de los cursos sólo rescatando el _id, la respuesta se devuelve incluyendo el ID de la inserción que hicimos un poco más arriba. Sin errores:
{
getCourses{
_id
}
}
// Respuesta
{
"data": {
"getCourses": [
...
{
"_id": "5f7cb61decd23018eb90cd84"
}
]
}
}
Pero realizamos el query pidiendo el title de los cursos… armagedón!!! tenemos el error de despliegue, como lo vimos en la clase en el moemento de la inserción.
{
getCourses{
_id
title
}
}
// Respuesta
{
"errors": [
{
"message": "Cannot return null for non-nullable field Course.title.",
"locations": [
{
"line": 4,
"column": 5
}
],
"path": [
"getCourses",
5,
"title"
]
}
],
"data": {
"getCourses": [
{
"_id": "5f7b8cc9673aba0478c9a319",
"title": "My title 1"
},
{
"_id": "5f7b8cc9673aba0478c9a31a",
"title": "My title 2"
},
{
"_id": "5f7b8cc9673aba0478c9a31c",
"title": "My title 4"
},
{
"_id": "5f7b8cc9673aba0478c9a31b",
"title": "My title 3"
},
{
"_id": "5f7ba24862e33f0c436dd5ae",
"title": "My title 5 - v2"
},
null
]
}
}
Esta vez no incluyó obviamente el ID del curso con problemas… pero ese curso sí existe en la colección, y es un curso “ocrrupto” … jejejeje
Por lo tanto, el control lo debemos mantener en nuestro código. ¿O hay algo que me perdí?
Si no tengo cuidado revisando los datos previamente en mi código podría enterarme mucho después de tener datos corruptos en mis colecciones.
Finalmente, al presentarse un error de este tipo (desplegando datos que se supone deben existir en el documento) no se dispara un error en el código del query, por lo que por cada ejecución que se realice, deberíamos revisar el contenido de la respuesta buscando un arreglo llamado “errors” para ver su hubo algún problema.
(escribí todo esto al finalizar la clase… veamos qué viene a continuación, espero que después de tanto escribir no me den la respuesta en los primeros 15 segundos de la siguiente clase)
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.