Javascript GraphQL突变如何与类型关联
当我按照以下方式设置模式时:Javascript GraphQL突变如何与类型关联,javascript,reactjs,graphql,prisma,Javascript,Reactjs,Graphql,Prisma,当我按照以下方式设置模式时: type Mutation { createUser(data: CreateUserInput!): User! } type User { id: ID! name: String! password: String! email: String! posts: [Post!]! comments: [Comment!]! } 我的解析器: const Mutation = { async cr
type Mutation {
createUser(data: CreateUserInput!): User!
}
type User {
id: ID!
name: String!
password: String!
email: String!
posts: [Post!]!
comments: [Comment!]!
}
我的解析器:
const Mutation = {
async createUser(parent, args, { prisma }, info) {
if(args.data.password.length < 8) {
throw new Error("Pasword must be 8 characters or longer")
}
return prisma.mutation.createUser({
data: {
...args.data,
password
}
})
}
}
GraphQL如何知道createUser与我的用户模型相关联?我可以设置它,以便createUser在生成令牌后返回令牌而不是用户,或者我可以将createUser重命名为createPerson。我从未定义createUser和User之间的关联。我不确定如何将通过createUser输入的数据直接保存在用户表中,而不是另一个表中 两者之间没有关联 您的解析器可以同样轻松地返回包含一些虚拟数据的普通对象:
async createUser(parent, args, { prisma }, info) {
...
return {
id: 1,
name: 'Kevvv',
password: 'password',
email: 'kevvv@stackoverflow.com',
}
}
或者使用其他方式获取用户:
async createUser(parent, args, { prisma }, info) {
...
return fetchUserFromAPI()
// or some other data source like a DB
}
prisma.mutation.createUser返回解析为表示已创建用户的对象的承诺。此对象的属性恰好与您在架构中指定的用户类型匹配,但除此之外,它并没有什么特别之处。您是在询问您的模式和prisma.mutation.createUser中的用户类型吗?是的,这是正确的。那么,mutation如何在我的Postgres或MongoDB中创建一个名为User的表呢?游乐场界面还会自动显示所有用户属性,如名称、电子邮件、,etc在执行CreateUserOther时,您的变异会在数据库中创建一行,因为您在其解析器中调用prisma.mutation.createUser。Prisma客户端是根据您为Prisma服务器提供的数据模型定义自动生成的。您定义了一个用户数据模型,在生成客户端时,它会自动创建相应的Prisma客户端方法。PLAYOND显示的是模式中的用户类型,而不是Prisma中的用户类型。这二者只有在您的模式将它们联系起来的情况下才是相关的。例如,您可以调用模式类型User,但可以调用datamodel Person。然后,您的表将被称为Person,客户端调用将是prisma.translations.createPerson,但其他任何内容都不会改变。我想我仍然感到困惑。在MongoDB中,我在我的解析器中具体地实例化了类似于新用户{User:req.userId}的东西,以便使突变与用户模型相关联。在上面的Prisma示例中,没有提到解析器中的任何类型。如果我的数据模型中的MemberA和MemberB具有相同的属性,例如名称和电子邮件(这是一个人为的示例),那么我的解析器createMember如何知道与哪一个关联?