如何通过嵌套值获取模型对象?

时间:2019-03-19 17:43:31

标签: javascript graphql

我是GraphQL的新手,所以我正在做第一个查询,并且试图查询嵌套键email

这是我的模式

const UserLogin = new GraphQLObjectType({
  name: 'UserLoginType',
  fields: () => ({
    login: { type: GraphQLString },
    email: { type: GraphQLString },
  }),
});

exports.UserType = new GraphQLObjectType({
  name: 'UserType',
  fields: () => ({
    id: NotNullStringType,
    name: { type: GraphQLString },
    state: { type: GraphQLString },
    login: { type: UserLogin },
  }),
});

我想做的是建立一个查询,该查询接收一封电子邮件并搜索UserType.login.email值,并返回与该电子邮件匹配的第一个值或空值。

谢谢!

编辑:在我的redux/actions.js文件中添加:

export const fetchLoginsByEmail = (userEmail) => {
  return createGraphqlAction(
    {
      query: `
        query fetchUserByEmail($userEmail: String!) {
          fetchUserByEmail(email: $userEmail) {
            login {
              email
            }
            state
            name
            id
          }
        }
      `,
      variables: {
        userEmail,
      }
    },
    FETCH_LOGINS_BY_EMAIL,
  );
};

在我的query.js文件中,我的model.exports对象中有这个文件:

fetchUserByEmail: { 
    type: UserType,
    resolve: async (source, args, { user, loginId }) => {
      if (!user) {
        return null;
      }

      return serailize({
        ...user,
        login: await getLogin(loginId),
      });
    },
  },

1 个答案:

答案 0 :(得分:0)

您似乎缺少查询解析器的arguments参数。

将您的query.js更新为以下内容:

fetchUserByEmail: { 
    type: UserType,
    args: {
      email { type: GraphQLString }
    },
    resolve: async (source, args, { user, loginId }) => {
      // You can now use args.email here and filter your results with it
      console.log(args.email);

      if (!user) {
        return null;
      }

      return serailize({
        ...user,
        login: await getLogin(loginId),
      });
    },
  },

希望有帮助。