GraphQL Apollo 插件
用于 elysia 的插件,可以使用 GraphQL Apollo。
使用以下命令安装:
bash
bun add graphql @elysiajs/apollo @apollo/server
然后使用它:
typescript
import { Elysia } from 'elysia'
import { apollo, gql } from '@elysiajs/apollo'
const app = new Elysia()
.use(
apollo({
typeDefs: gql`
type Book {
title: String
author: String
}
type Query {
books: [Book]
}
`,
resolvers: {
Query: {
books: () => {
return [
{
title: 'Elysia',
author: 'saltyAom'
}
]
}
}
}
})
)
.listen(3000)
访问 /graphql
应该会显示 Apollo GraphQL playground 工作情况。
背景
由于 Elysia 基于 Web 标准请求和响应,这与 Express 使用的 Node 的 HttpRequest
和 HttpResponse
不同,导致 req, res
在上下文中为未定义。
因此,Elysia 用 context
替代两者,类似于路由参数。
typescript
const app = new Elysia()
.use(
apollo({
typeDefs,
resolvers,
context: async ({ request }) => {
const authorization = request.headers.get('Authorization')
return {
authorization
}
}
})
)
.listen(3000)
配置
该插件扩展了 Apollo 的 ServerRegistration(即 ApolloServer
的构造参数)。
以下是用于使用 Elysia 配置 Apollo Server 的扩展参数。
path
@default "/graphql"
暴露 Apollo Server 的路径。
enablePlayground
@default process.env.ENV !== 'production'
确定 Apollo 是否应提供 Apollo Playground。