我的 CRUD 操作有效。但是它们中的许多也产生了一个我无法追踪的单一的、特定的控制台错误。
[GraphQL error]: Message: Variable "$id" of required type "ID!" was not provided., Location: [object Object], Path: undefined
示例:我可以查看用户列表而不会产生错误,并且我可以访问单个用户的“详细信息”视图而不会产生错误。这两个单独工作很好。但不知何故,从前者遍历到后者会产生错误。
我在 GraphQL-Playground 中测试了两个查询(用户和用户),没有收到错误。我还尝试将 ID 作为“String”类型而不是“ID!”类型。(也没有!)。我尝试了其他将用户 ID 提供给解析器的“hacky”方式。我已经尝试传递其他字段来代替查询解析器中的“信息”参数。
重申一下,单独查看任一页面(即:清除控制台并重新加载任一页面)不会触发错误。这似乎是关于从/users
到的旅程user?id=12345
。
来自 datamodel.prisma:
type User {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
name: String!
email: String! @unique
password: String!
resetToken: String
resetTokenExpiry: Float
permissions: Permission
posts: [Post]! @relation(name: "PostsOfUser" onDelete: CASCADE)
comments: [Comment!]! @relation(name: "CommentsOfUser" onDelete:
CASCADE)
来自 schema.graphql 中的查询对象:
user(id: ID!): User
用户查询解析器:
async user(parent, { id }, { db, request }, info) {
const user = await db.query.user({ where: { id } }, info);
return user;
使用 react-apollo 和 graphql-tag 包的 gql 查询:
const SINGLE_USER_QUERY = gql`
query SINGLE_USER_QUERY($id: ID!){
user(id: $id) {
id
name
email
permissions
createdAt
updatedAt
}
}
`;
预期行为:用户可以单击用户列表中的单个用户,以下页面将包含有关该用户的详细信息。
实际结果:它可以工作,但也会产生控制台错误:
[GraphQL error]: Message: Variable "$id" of required type "ID!" was
not provided., Location: [object Object], Path: undefined
index.js:86
[Network error]: ServerError: Response not successful: Received status code 400
index.js:2178 GraphQL error occurred [getDataFromTree] Error:
Network error: Response not successful: Received status code 400
at new ApolloError (ApolloError.js:37)
at QueryManager.js:328
at QueryManager.js:700
at Array.forEach (<anonymous>)
at QueryManager.js:699
at Map.forEach (<anonymous>)
at QueryManager.push../node_modules/apollo-client/core/QueryManager.js.QueryManager.broadcastQueries (QueryManager.js:694)
at QueryManager.js:277