出现错误:“Query”类型的“user”字段上的未知参数“id”[GraphQL,Relay,React]

Posted

技术标签:

【中文标题】出现错误:“Query”类型的“user”字段上的未知参数“id”[GraphQL,Relay,React]【英文标题】:Getting error : Unknown argument "id" on field "user" of type "Query" [GraphQL, Relay, React] 【发布时间】:2016-03-13 08:19:07 【问题描述】:

我们正在中继中形成一个查询。我们的用户数据库设置如下:


function User(id, name, des) 
  this.id = id.toString()
  this.name = name
  this.des = des


var users = [new User(1, 'abc', 'Hello abc'), new User(2, 'xyz', 'Hello xyz')]

module.exports = 
  User: User,
  getAnonymousUser: function() return users[0] 


我们的schema.js文件如下:

var nodeDefinitions = GraphQLRelay.nodeDefinitions(function(globalId) 
  var idInfo = GraphQLRelay.fromGlobalId(globalId)
  if (idInfo.type == 'User') 
    return db.getUser(idInfo.id)
   
  return null
)


var userType = new GraphQL.GraphQLObjectType(
  name: 'User',
  description: 'A person who uses our app',
  isTypeOf: function(obj)  return obj instanceof db.User ,

  fields: function() 
    return 
      id: GraphQLRelay.globalIdField('User'),
      des: 
        type: GraphQL.GraphQLString,
        description: 'The des of the user',
      ,
      name: 
        type: GraphQL.GraphQLString,
        description: 'The name of the user',
      
    
  ,
  interfaces: [nodeDefinitions.nodeInterface],
)

module.exports = new GraphQL.GraphQLSchema(
  query: new GraphQL.GraphQLObjectType(
    name: 'Query',
    fields: 
      node: nodeDefinitions.nodeField,
      user: 
        type: userType,
        resolve: function()  return db.getAnonymousUser() ,
      ,
    ,
  ),
)

我们已经创建了我们的中继容器:

exports.Container = Relay.createContainer(App, 
  fragments: 
    user: () => Relay.QL`
        fragment on User 
            name
        
    `,
  ,
)

exports.queries = 
  name: 'AppQueries',
  params:  
   userID: '1',
  ,
  queries: 
    //user: () => Relay.QL`query  user `,
    user: () => Relay.QL `query  user(id: $userID) `
  ,


但我们无法通过 userId 获取用户,并在运行 npm run build 命令时出现以下错误:

错误:“查询”类型的字段“用户”上的未知参数“id”。 文件:App.js 资源: >

查询应用程序用户(id:$userID) ^^^

-----------enter code here

有人可以帮助我们解决这个问题吗?

【问题讨论】:

【参考方案1】:

您的架构没有为用户字段定义任何参数:

 user: 
   type: userType,
   resolve: function()  return db.getAnonymousUser() ,
 ,

要按 ID 获取用户,请定义 id 参数,然后按该 ID 获取用户:

user: 
  args: 
    id:  type: GraphQLString 
  ,
  resolve: function(root, args) 
    return db.findUserById(args.id); // you don't have this method but it's an example of how to use the arg
  

【讨论】:

感谢您的回复,但我们收到了新的错误,如下面的新帖子中所述...

以上是关于出现错误:“Query”类型的“user”字段上的未知参数“id”[GraphQL,Relay,React]的主要内容,如果未能解决你的问题,请参考以下文章

带有快速错误的 GraphQL:Query.example 字段类型必须是输出类型,但得到:[object Object]

即使数据存在,`User` 类型的字段也会为 Query 返回 `null`

PostgreSQL:十进制/数字数据类型上的数字字段溢出 - 为啥会出现此错误

“时间”字段上的 Access 2016 类型转换错误

Angular Apollo:错误:GraphQL 错误:“Mutation”类型的字段“AuthLogin”上的未知参数“用户名”

Facebook 错误:“(#100) 尝试访问节点类型 (User) 上不存在的字段 (user_friends)”