GraphQL查询无法返回数组:getUsers查询报错求助
GraphQL查询报错:
Cannot query field "users" on type "User" 我刚接触GraphQL,在Node.js项目中实现getUsers查询以返回用户数组,但在GraphQL Studio测试时出现错误:"GraphQLError: Cannot query field \"users\" on type \"User\"。目前仅能在user查询中返回指定的具体字段,相关代码如下:
报错的查询语句
{ getUsers { users } }
user-resolvers.js中的getUsers resolver
getUsers: async(parent, args, context, info) => { try { let users = await User.find() console.log(users) // console.log(users) shows all of the users in the format found in type Users return users; } catch (error) { throw error; } },
schema.js相关代码
export default` type Users { _id: ID! username: String email: String! firstName: String lastName: String basicInfo: [BasicInfo]! avatar: String date: Date } type BasicInfo { birth_date: String! age: Int! feet: Int! inches: Int! } ... type Query { getUsers: [Users] } ... schema { query: Query mutation: Mutation } `;
index.js相关代码
import UserResolvers from './user-resolvers.js'; import User from '../../models/User.js'; export default { Query: { user: UserResolvers.user, getUsers: UserResolvers.getUsers, }, ... };
之前正常返回的user查询示例
... const user = await requireAuth(user) return { _id: user._id, username: user.username, firstName: user.firstName, email: user.email, }
错误原因与解决办法
错误原因
你的getUsers在schema中定义的返回类型是[Users](Users对象的数组),但查询时却尝试在getUsers下请求users字段——而Users类型本身并没有users这个字段,这就导致了GraphQL报错。
解决步骤
- 修正查询语句:直接请求
Users类型包含的具体字段,而非不存在的users字段。正确的查询示例:
{ getUsers { _id username email firstName basicInfo { birth_date age } # 其他需要的字段都可以在这里列出 } }
- 确认resolver和schema的一致性:
- 你的resolver已经正确返回了用户数组(从
console.log(users)的输出可以确认),这部分没问题。 - schema中
getUsers: [Users]的定义也正确,和resolver返回的数组类型匹配。
- 你的resolver已经正确返回了用户数组(从
简单来说,当查询返回的是对象数组时,你需要在查询中指定数组中每个对象要返回的字段,而不是试图用一个users字段去包裹它们。
内容的提问来源于stack exchange,提问作者pelotador.1
相关产品推荐
相关产品推荐

