@91codes/adonis-graphql 中文文档教程
Adonis GraphQL
这是粘合 apollo 服务器和 Adonis v5 的薄层。 它允许您在您的应用程序中拥有一个或多个 GraphQL 端点 应用。 我强烈建议将 TypeGraphQL 与此包结合使用。 尽管 可以以其他方式使用它,此处的文档将假定您将使用 TypeGraphQL。
Installation
yarn add @91codes/adonis-graphql
# or if you are using npm
npm i @91codes/adonis-graphql
Usage
构建您的 GraphQL 架构。 更多文档位于 https://typegraphql.com/docs/getting-started.html
生成 GraphQL 提供程序
node ace make:provider graphql
构建架构,创建 GraphQL 实例,并将其作为单例附加到提供程序的引导方法中。
export default class GraphqlProvider {
constructor(protected app: ApplicationContract) {
}
public async boot() {
// Import all of your resolvers
const { default: MyResolver } = await import('App/GraphQL/MyResolver')
const schema = await buildSchema({ resolvers: [MyResolver] })
const server = new GraphQLServer({ schema })
await server.start()
this.app.container.singleton('App/GraphQL/Server', () => server)
}
}
使用以下内容创建 contracts/graphql-server.ts
,为 Adonis IOC 添加
declare module '@ioc:App/GraphQL/Server' {
import { GraphQLServer } from '@91codes/adonis-graphql'
const server: GraphQLServer
export default server
}
类型生成控制器
node ace make:controller GraphQLController
更新控制器以提供 GraphQL 响应
import server from '@ioc:App/GraphQL/Server'
export default class GraphQLController {
public async serve(ctx: HttpContextContract) {
return server.handle(
ctx,
ctx.request.method() === 'GET' || ctx.request.types().includes('text/html') // Show landing screen in this case
)
}
}
在 start/routes.ts
Route.any('graphql', 'GraphQLController.serve')
Adonis GraphQL
This is a thin layer that glues apollo server and Adonis v5. It allows you to have one or more GraphQL endpoints in your application. I strongly recommend using TypeGraphQL in combination with this package. While it's possible to use it in other ways, the documentation here will assume you are going to use TypeGraphQL.
Installation
yarn add @91codes/adonis-graphql
# or if you are using npm
npm i @91codes/adonis-graphql
Usage
Build your GraphQL schema. More documentation at https://typegraphql.com/docs/getting-started.html
Generate a GraphQL provider
node ace make:provider graphql
Build the schema, create a GraphQL instance, and attach it as a singleton in the provider's boot method.
export default class GraphqlProvider {
constructor(protected app: ApplicationContract) {
}
public async boot() {
// Import all of your resolvers
const { default: MyResolver } = await import('App/GraphQL/MyResolver')
const schema = await buildSchema({ resolvers: [MyResolver] })
const server = new GraphQLServer({ schema })
await server.start()
this.app.container.singleton('App/GraphQL/Server', () => server)
}
}
Create contracts/graphql-server.ts
with the following content to add typings for Adonis IOC
declare module '@ioc:App/GraphQL/Server' {
import { GraphQLServer } from '@91codes/adonis-graphql'
const server: GraphQLServer
export default server
}
Generate a controller
node ace make:controller GraphQLController
Update the controller to serve GraphQL responses
import server from '@ioc:App/GraphQL/Server'
export default class GraphQLController {
public async serve(ctx: HttpContextContract) {
return server.handle(
ctx,
ctx.request.method() === 'GET' || ctx.request.types().includes('text/html') // Show landing screen in this case
)
}
}
Register the route in start/routes.ts
Route.any('graphql', 'GraphQLController.serve')