22

Although I copied and pasted the graphQL query from the GraphiQL tool after I tested it at GraphiQL successfully , the query returned with an error when I tried it in Apollo client within a reactJS app:

[GraphQL error]: Message: Cannot query field "allStudents" on type "Query"., Location: [object Object], Path: undefined

Here is my implementation:

const link = createHttpLink({
  uri: 'http://localhost:8000/graphql',
  fetchOptions: { method: "POST" }
});

const client = new ApolloClient({
  link: link 
});

const GET_STUDENTS = gql`
query getStudents($schoolID: Int!){
  allStudents(schoolId: $schoolID){
    pickUpLat
    pickUpLng
  }
}
`;

client
  .query({
    query: GET_STUDENTS,
    variables: { schoolID: 1 }
  })
  .then(result => console.log(result));

What could be wrong? here is the correct response that I expected:

{
  "data": {
    "allStudents": [
      {
        "pickUpLat": 31.9752942479727,
        "pickUpLng": 35.8438429235775
      },
      {
        "pickUpLat": 31.9754545979993,
        "pickUpLng": 35.8437478537235
      }
    ]
  }
}

EDIT I get expected results using GraphiQL: enter image description here

EDIT2

I tried to compare the payload between my request and GraphiQL request:

My request's payload: ( it has __typename which I don't know why )

{"operationName":"getStudents","variables":{"schoolID":1},"query":"query getStudents($schoolID: Int) {\n  allStudents(schoolId: $schoolID) {\n    pickUpLat\n    pickUpLng\n    __typename\n  }\n}\n"}

GraphiQL request's payload:

{"query":"query getStudents($schoolID: Int!){\n  allStudents(schoolId: $schoolID){\n    pickUpLat\n    pickUpLng\n  }\n}","variables":{"schoolID":1},"operationName":"getStudents"}

So, they are almost identical, Any idea?

simo
  • 20,548
  • 31
  • 101
  • 188
  • 1
    your variable is `schoolId` and in query it is `$schoolID` this might be the problem – bennygenel May 20 '18 at 12:15
  • I found that it should be `schoolID` not `schoolId` , I also tried `$schoolID` but got the same error, kindly see the EDIT above, it show that `schoolID` is the right var name at QUERY VARIABLES section.. how can I get more details on the error? – simo May 20 '18 at 12:20
  • What version of `apollo-client` are you using? You're supposed to configure the client with a cache, like `apollo-cache-inmemory`, and normally your client would throw an error if you tried to use it without having done so – Daniel Rearden May 20 '18 at 19:07
  • I found that my problem was related to https://github.com/apollographql/apollo-link/issues/609 – simo May 21 '18 at 08:14

3 Answers3

2

In my case, I had defined a query which didn't require any parameters and it would return an array of objects:

myBasicQuery: [BasicAnswer]

type BasicAnswer {
  name String
  phone String
}

I was getting the error: Cannot query field \"BasicAnswer\" on type \"BasicAnswer\" when I declared it like this:

query myBasicQuery {
  BasicAnswer {
      name
      phone
  }
}

Leaving only the fields of BasicAnswer fixed the issue:

query myBasicQuery {
    name
    phone
}
Lucio Mollinedo
  • 1,431
  • 20
  • 25
2

The fault with my query was that I didn't download the new schema.

You can download the schema by using: apollo schema:download --endpoint=http://localhost:8080/graphql schema.json

replace http://localhost:8080/graphql with your server endpoint

You can see more at https://www.apollographql.com/docs/ios/downloading-schema/

nymphadora
  • 264
  • 4
  • 11
1

For anyone else who might be searching for this problem, make sure you're importing ApolloClient from apollo-client package and not other packages.

Ali Mousavi
  • 634
  • 5
  • 13