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

时间:2017-09-08 05:17:41

标签: graphql graphql-js

我有一个名为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 中记录args时,它们是空的。

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

1 个答案:

答案 0 :(得分:0)

我已经搜索了很长时间,但是找不到解决该问题的默认方法。我现在的解决方案是将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,
      },
    });
  },
}

语法与您的语法不完全相同,但是您可以理解。并且应该进一步检查这些属性是否存在。有点惊讶的是,没有一种简单的方法可以做到这一点(或者至少是一种在视觉上更简单的方法)!

希望这可以帮助其他偷窥狂!