reactjs 出现错误的原因:无法查询类型“Query”上的字段xx?

vuv7lop3  于 2022-11-29  发布在  React
关注(0)|答案(7)|浏览(185)

尽管我在GraphiQL上成功测试了graphQL查询之后,从GraphiQL工具中复制并粘贴了它,但当我在一个reactJS应用程序中的Apollo客户端中尝试该查询时,该查询返回了一个错误:

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

下面是我的实现:

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));

可能有什么问题?下面是我所期望的正确答案:

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

EDIT我使用GraphiQL得到预期的结果:

编辑2

我尝试比较我的请求和GraphiQL请求之间的有效负载:
我的请求的负载:(它有__typename,我不知道为什么)

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

GraphiQL请求的负载:

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

他们几乎一模一样,知道吗?

a7qyws3x

a7qyws3x1#

我的查询的错误是我没有下载新的模式。
您可以使用以下命令下载架构:apollo schema:download --endpoint=http://localhost:8080/graphql schema.json
将http://localhost:8080/graphql替换为您的服务器端点
您可以在https://www.apollographql.com/docs/ios/downloading-schema/上查看更多信息

2ledvvac

2ledvvac2#

在我的例子中,我定义了一个不需要任何参数的查询,它将返回一个对象数组:

myBasicQuery: [BasicAnswer]

type BasicAnswer {
  name String
  phone String
}

我得到的错误:Cannot query field \"BasicAnswer\" on type \"BasicAnswer\"时,我是这样宣告的:

query myBasicQuery {
  BasicAnswer {
      name
      phone
  }
}

仅保留BasicAnswer字段解决了此问题:

query myBasicQuery {
    name
    phone
}
2o7dmzc5

2o7dmzc53#

对于可能正在搜索此问题的其他人,请确保您正在从**apollo-client包而不是其他包导入ApolloClient**。

t1qtbnec

t1qtbnec4#

对于任何追随apollo-client的人来说,现在已经日落西山,支持@apollo/client
下面是构造查询的方法

gxwragnw

gxwragnw5#

更新了@graphql-codegen/cli包到最新版本(2.6.2),它的工作正常。
凡用羽浦者也。
问题是

query: query_root
  # query: Query # wrong value before upgrade
  mutation: mutation_root
  subscription: subscription_root
}```
yhived7q

yhived7q6#

查看您的实体,它可能缺少@Field()注解。例如:

@PrimaryGeneratedColumn()
id: string;//Will not be mapped by GraphQL and you will get OP's error
    
@Column()
@Field()
name: string;//Will be mapped by GraphQL and you will not get OP's error
hgncfbus

hgncfbus7#

如果你把graphqls文件分成碎片,并且忘记在codegen. ts中定义它,也会发生这种情况。
(Java项目)/源/主/资源:

  • schema.graphqls
  • search.graphqls

(Angular 项目)/codegen.ts

const codegen: CodegenConfig = {
  overwrite: true,
  // add wildcards here, to read all files:
  schema: "../projectname/src/main/resources/graphql/*.graphqls",
  documents: './src/app/core/graphql/*.ts',
  generates: {
     ....
  }
}

相关问题