GraphQL突变如何将自身与类型关联

时间:2019-05-05 17:14:07

标签: 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 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与我的User模型相关联?我可以进行设置,以使createUser返回令牌而不是User(在生成令牌之后),也可以将createUser重命名为createPerson。我从未定义过createUserUser之间的关联。我不确定通过createUser输入的数据如何定向保存在user表中,而不是在另一个表中。

1 个答案:

答案 0 :(得分:1)

两者之间没有关联。

您的解析器可以很容易地返回带有一些伪数据的普通对象:

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返回一个Promise,该Promise解析为一个代表所创建用户的对象。该对象碰巧具有与您在架构中指定的User类型相匹配的属性,但除此之外没有任何“特殊”的地方。