将自定义 GraphQL 解析器和类型添加到 Prisma/Nexus 模式中
Add custom GraphQL resolvers and types into Prisma/Nexus schema
使用: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 端点)
虽然创建 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
可以 return 一组注释对象,或者解析为一个的 Promise。例如,如果您正在调用其他 API,您通常会 return 带有调用结果的 Promise。如上所示,解析器公开父值、字段的参数和上下文对象——您可以使用这些信息中的任何一个来确定如何解析特定字段。
使用: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 端点)
虽然创建 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
可以 return 一组注释对象,或者解析为一个的 Promise。例如,如果您正在调用其他 API,您通常会 return 带有调用结果的 Promise。如上所示,解析器公开父值、字段的参数和上下文对象——您可以使用这些信息中的任何一个来确定如何解析特定字段。