在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新手。谢谢!