Ir para o conteúdo

Tratamento de Erros da API


Erros de Autorização

Erro de Autorização

No caso de uma Mutation onde o Usuário precisa estar autenticado para fazer como abaixo:

mutation criarQuestao($questao_: QuestaoInput) {
  createQuestao(questao: $questao_) {
    _id
  }
}

Erros vindo da API do Firebase já são traduzidos para Português.

{
  "errors": [
    {
      "message": "Você precisa estar autenticado para fazer isso",
      "locations": [
        {
          "line": 28,
          "column": 3
        }
      ],
      "path": [
        "createQuestao"
      ]
    }
  ],
  "data": {
    "createQuestao": null
  }
}

Erros vindo da API do Firebase já são traduzidos para Português.

Erro de Autenticação junto de dados de Assuntos

Caso seja enviado mais de uma Mutation, algumas que dão certo, outras que não dão certo, os dados para que deu certo ainda serão retornados corretamente, e a mensagem de erro pra que não deu certo também

mutation criarQuestao($questao_: QuestaoInput) {
  login(username: "admin", password: "admin")

  createQuestao(questao: $questao_) {
    _id
  }
}
{
  "errors": [
    {
      "message": "Você precisa estar autenticado para fazer isso",
      "locations": [
        {
          "line": 28,
          "column": 3
        }
      ],
      "path": [
        "createQuestao"
      ]
    }
  ],
  "data": {
    "login": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZDdiZjJlN2UyMGQ2NzRiOTM4ZWE5ODEiLCJ1c2VybmFtZSI6ImFkbWluIiwiaWF0IjoxNTY4OTE3MjgzLCJleHAiOjE2MDA0NzQ4ODN9.QWUArHESMmwuMfjiFmzhjg5um9V78V7eb6p9_2zz-d4",
    "createQuestao": null
  }
}

Erros de Input inválida

Input inválida

Caso um Query seja feito com uma _id do Mongoose inválida por exemplo, causando um Erro uncatched

query {
  questao(_id: "asd") {
    numeroQuestao
  }
}
{
  "errors": [
    {
      "message": "Cast to ObjectId failed for value \"asd\" at path \"_id\" for model \"questoes\"",
      "locations": [
        {
          "line": 20,
          "column": 3
        }
      ],
      "path": [
        "questao"
      ]
    }
  ],
  "data": {
    "questao": null
  }
}

Caso uma _id válida seja passada, mas não haja uma Questão com aquela _id

query {
  questao(_id: "5d3f2e596419718752566ef3") {
    numeroQuestao
  }
}
{
  "data": {
    "questao": null
  }
}

Em ambos os casos o retorno de data.questao é igual, null, pois não há uma Questão com aquela _id, apenas o que muda é o campo errors do primeiro caso, que pode ser utilizado para debugging, não sendo necessário tratar os dois casos de forma diferente, já que a Frontend irá conseguir lidar com o resultado de toda forma, checando data.questao


Erros de Sintaxe ou Schema (padrão do GraphQL-express)

Erro de Sintaxe

query {
  questao() {
    numeroQuestao
  }
}
{
  "errors": [
    {
      "message": "Syntax Error: Expected Name, found )",
      "locations": [
        {
          "line": 20,
          "column": 11
        }
      ]
    }
  ]
}

Erro de Schema

mutation {
  createQuestao(questao: {ano: 2017}) {
    _id
  }
}
"errors": [
  {
    "message": "Field QuestaoInput.enunciado of required type String! was not provided.",
    "locations": [
      {
        "line": 26,
        "column": 26
      }
    ]
  },
  {
    "message": "Field QuestaoInput.fonte of required type String! was not provided.",
    "locations": [
      {
        "line": 26,
        "column": 26
      }
    ]
  }
  // ...
]