【问题标题】:Getting error : Unknown argument "id" on field "user" of type "Query" [GraphQL, Relay, React]出现错误:“Query”类型的“user”字段上的未知参数“id”[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

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

【问题讨论】:

    标签: javascript reactjs npm relay graphql


    【解决方案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
      }
    }
    

    【讨论】:

    • 感谢您的回复,但我们收到了新的错误,如下面的新帖子中所述...
    猜你喜欢
    • 2020-05-18
    • 2018-02-12
    • 2017-08-21
    • 2020-10-26
    • 2021-11-20
    • 2021-09-05
    • 2017-02-03
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多