GraphQl 将查询参数传递给子类型

Posted

技术标签:

【中文标题】GraphQl 将查询参数传递给子类型【英文标题】:GraphQl pass query arguments down to sub type 【发布时间】:2018-02-16 22:41:34 【问题描述】:

我有一个名为 ProfileQuery 的查询:

const ProfileQuery = 
  description: 'Profile',
  type: UserType,
  args: 
    argOne: 
      type: GraphQLString,
    ,
  ,
  resolve: (
    root
  ) => getProfile(),

我有一个名为:UserType 的类型,我希望能够访问它的子类型中的参数。

UserType -> SettingsType.requiresVerification

我在 UserType 中有以下字段:

settings: 
  type: SettingsType, // I want to access the args from the Profile query in here?!
  resolve: async (
     requestedUser,
     args,
      rootValue:  request:  user   
   ) => getAllSettings(user.id),
,

但是,当我在 SettingsType 中记录参数时,它们是空的。

如何将参数从 ProfileQuery 传递到 SettingsType?

【问题讨论】:

【参考方案1】:

我为此搜索了很长时间,但找不到解决此问题的默认方法。我现在的解决方案是将 args 附加到父级。

这是一个示例,您将在其中检索用户和消息列表,并对您的消息列表应用、偏移和限制:

Query: 
  user: async (parent,  id, offset, limit ,  models ) => 
    const user = await models.User.findByPk(id);
    user.offset = offset;    // Attach arg here
    user.limit = limit;      // Attach arg here
    return user;
  ,
,

User: 
  messages: async (user, args,  models ) => 

    return await models.Message.findAll(
      offset: user.offset,   // Retrieve arg here
      limit: user.limit,     // Retrieve arg here
      where: 
        userId: user.id,
      ,
    );
  ,

语法与您的不完全一样,但您明白了。并且应该对这些属性是否存在进行额外检查。有点惊讶,没有一种简单的方法可以做到这一点(或者,至少,一种视觉上更简单的方法)!

希望这对其他窥视者有所帮助!

【讨论】:

以上是关于GraphQl 将查询参数传递给子类型的主要内容,如果未能解决你的问题,请参考以下文章

将枚举类型作为参数传递给 GraphQL 查询 - Quarkus

GraphQL 将参数传递给子解析

将参数传递给子节点解析器函数

如何将参数传递给graphql查询?

将多个参数传递给 GraphQL 查询

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?