如何在GraphQL中获得关系?

时间:2019-03-07 18:34:50

标签: graphql prisma

在prisma中,我具有以下数据模型。

type User {
  id: ID! @unique
  name: String!
  email: String! @unique
  password: String!
  ...etc
  userTypeA: UserTypeA @relation(name: "UserOnUserTypeA")
  userTypeB: UserTypeB @relation(name: "UserOnUserTypeB")
}

type UserTypeA {
  id: ID! @unique
  user: User @relation(name: "UserOnUserTypeA")
  userTypeB: [userTypeB!]!
}

type UserTypeB {
  id: ID! @unique
  user: User @relation(name: "UserOnUserTypeB")
  userTypeA: UserTypeA!
  ...etc
}

我还有2个解析器,一个用于注册,仅返回UserTypeA,另一个用于登录,返回任何类型的用户。

async register(parent, args, ctx, info) {
    args.email = args.email.toLowerCase();
    const password = await bcrypt.hash(args.password, 10);
    const user = await ctx.db.mutation.createUser(
      {
        data: {
          ...args,
          password
        }
      },
      info
    );
    const userTypeA = await ctx.db.mutation.createUserTypeA(
      {
        data: {
          user: {
            connect: {
              id: user.id
            }
          }
        }
      },
      info
    );
    const token = jwt.sign({ userId: userTypeA.id }, process.env.APP_SECRET);
    ctx.response.cookie("token", token, {
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 365
    });
    return userTypeA;
  },

async login(parent, { email, password }, ctx, info) {
    const user = await ctx.db.query.user({ where: { email: email } });
    if (!user) {
      throw new Error("No user found");
    }
    const valid = await bcrypt.compare(password, user.password);
    if (!valid) {
      throw new Error("Invalid Password!");
    }
    const token = jwt.sign({ userId: user.id }, process.env.APP_SECRET);
    ctx.response.cookie("token", token, {
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 365
    });
    return user;
  },

寄存器突变正确返回了UserTypeA,并且嵌套后可以从User模型中找到信息。但是,当我使用登录突变时,可以获得有关用户的信息,但嵌套的UserTypeA为null。

在Wes Bos Advanced React的教程中,他使用React和GraphQL / Prisma(在线商店)制作了一个全栈应用程序,他使用相同的解析器并获取有关用户的嵌套信息(例如购物车商品) )(在模型中定义为关系)。

PS。请记住,我是GraphQL / Prisma新手。谢谢!

0 个答案:

没有答案