A√ļn no tienes acceso a esta clase

Crea una cuenta y contin√ļa viendo este curso

Curso B√°sico de GraphQL

Curso B√°sico de GraphQL

Adri√°n Estrada

Adri√°n Estrada

Errores

14/25
Recursos

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

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi√≥n.

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…

Errores

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)