@91codes/adonis-graphql 中文文档教程

发布于 3年前 浏览 18 更新于 3年前

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')
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文