将自定义GraphQL解析器和类型添加到Prisma / Nexus模式中

时间:2019-05-12 13:11:37

标签: javascript graphql-js prisma-graphql nexus-prisma

使用: TypeScript Prisma MySQL GraphQLServer ApolloClient ,这样构建模式:

const schema = makePrismaSchema({
  // Provide all the GraphQL types we've implemented
  types: [Query, Mutation, User, Post],...

然后:

  const server = new GraphQLServer({
    schema,
    context: { prisma }
  });

如何将其与与SQL无关的自定义解析器和类型结合在一起?

(我也想通过GQL调用一些REST端点)

1 个答案:

答案 0 :(得分:0)

虽然nexus是为了与prisma一起使用而创建的,但实际上它只是一个架构生成器。您甚至可以不使用Prisma轻松地使用它来创建模式。例如:

export const User = prismaObjectType({
  name: 'User',
  definition(t) {
    t.list.field('comments', {
      type: 'Comment',
      resolve(root, args, ctx) {
        return getComments();
      },
    });
  },
})

export const Comment = prismaObjectType({
  name: 'Comment',
  definition(t) {
    t.string('body');
  },
})

这里getComments可以返回一组注释对象,或一个可以解析为一个的Promise。例如,如果您要调用其他API,通常会返回一个Promise以及调用结果。如上所示,解析器公开了父值,字段的参数和上下文对象-您可以使用任何此类信息来确定如何解析特定字段。