Skip to content

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 的 HttpRequestHttpResponse 不同,导致 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。