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

Posted

技术标签:

【中文标题】将自定义 GraphQL 解析器和类型添加到 Prisma/Nexus 架构中【英文标题】:Add custom GraphQL resolvers and types into Prisma/Nexus schema 【发布时间】:2019-09-29 15:51:01 【问题描述】:

使用:TypeScriptPrismamysqlGraphQLServerApolloClient、以这种方式构建架构:

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】:

虽然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。如上所示,解析器公开了父值、字段的参数和上下文对象——您可以使用这些信息中的任何一个来确定如何解析特定字段。

【讨论】:

对某些人来说不是很明显的一件事是,您需要在创建模式时将其添加到类型中:` makePrismaSchema( types: [OtherTypes..., Comment], ) `

以上是关于将自定义 GraphQL 解析器和类型添加到 Prisma/Nexus 架构中的主要内容,如果未能解决你的问题,请参考以下文章

使用graphql代码生成器时如何将自定义标量类型映射到打字稿类型?

Relay/GraphQL 将自定义字段添加到连接

导入 GraphQL 解析器和模式触发错误

如何将自定义 ObjectId 添加到解析服务器对象?

将自定义属性添加到 asp.net-mvc 中的页面指令

PHP 将自定义帖子类型添加到rss feed [WordPress]