Saltar al contenido principal
GraphQL

GraphQL: Cannot query field "X" on type "Y"

Cómo resolver el error 'Cannot query field' en GraphQL. Causas por campos inexistentes, typos en el schema y cómo inspeccionar el schema con introspección.

Error: Cannot query field on type

¿Por qué ocurre?

GraphQL valida cada query contra el schema antes de ejecutarla. El error ocurre cuando: - El campo no existe en el tipo del schema (typo o nombre incorrecto) - El campo existe pero en un tipo diferente al que estás consultando - El schema ha cambiado (campo renombrado o eliminado) pero la query no se actualizó - Estás consultando un campo de un fragmento en el tipo incorrecto - El campo es de un tipo anidado y no está correctamente delegado en el resolver

Solución paso a paso

1. Inspeccionar el schema con introspección

# Ver todos los tipos del schema
query {
  __schema {
    types {
      name
      fields {
        name
        type { name }
      }
    }
  }
}

# Ver los campos de un tipo específico query { __type(name: "User") { fields { name type { name kind } } } }

2. Usar GraphQL Playground / Apollo Sandbox Abre http://localhost:4000/graphql en tu navegador. El explorador interactivo muestra autocompletado de todos los campos disponibles.

3. Corregir el nombre del campo

# ❌ Error: typo en el campo
query GetUser {
  user(id: "1") {
    nombre      # ← no existe
    apellido    # ← no existe
  }
}

# ✅ Correcto: usar los nombres exactos del schema query GetUser { user(id: "1") { name # ← nombre exacto en el schema lastName # ← camelCase como en el schema } }

4. Verificar el schema en código (Apollo Server)

import { gql } from 'apollo-server'

const typeDefs = gql type User { id: ID! name: String! # ← así se llama el campo lastName: String # ← así se llama el campo email: String! posts: [Post!]! }

type Query { user(id: ID!): User users: [User!]! }

5. Error con fragmentos: asegurarse del tipo correcto

# ❌ Error: el fragmento se aplica al tipo incorrecto
fragment UserFields on Post {   # ← debería ser "on User"
  name
  email
}

# ✅ Correcto fragment UserFields on User { name email }

query { user(id: "1") { ...UserFields } }

6. Schema stitching / federación: campo no delegado

// En Apollo Federation, asegurarse de que el resolver resuelve el campo
const resolvers = {
  Query: {
    user: (_, { id }) => ({ id }),
  },
  User: {
    // ✅ Resolver explícito para el campo
    profile: async (parent) => {
      return await fetchProfile(parent.id)
    }
  }
}

Cómo evitarlo en el futuro

- Genera tipos TypeScript desde el schema con `graphql-codegen` para tener errores en compilación - Usa Apollo Studio o GraphQL Playground para explorar el schema antes de escribir queries - En el frontend, usa fragmentos tipados para que los cambios del schema se detecten automáticamente - Activa las validaciones de ESLint para GraphQL con `@graphql-eslint/eslint-plugin`

GraphQLApolloschemaqueryintrospección

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.