91 lines
1.6 KiB
Markdown
91 lines
1.6 KiB
Markdown
# GraphQL Apollo
|
|
|
|
Plugin for Elysia to use GraphQL Apollo.
|
|
|
|
## Installation
|
|
```bash
|
|
bun add graphql @elysiajs/apollo @apollo/server
|
|
```
|
|
|
|
## Basic Usage
|
|
|
|
```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)
|
|
```
|
|
|
|
Accessing `/graphql` should show Apollo GraphQL playground work with.
|
|
|
|
## Context
|
|
|
|
Because Elysia is based on Web Standard Request and Response which is different from Node's `HttpRequest` and `HttpResponse` that Express uses, results in `req, res` being undefined in context.
|
|
|
|
Because of this, Elysia replaces both with `context` like route parameters.
|
|
|
|
```typescript
|
|
const app = new Elysia()
|
|
.use(
|
|
apollo({
|
|
typeDefs,
|
|
resolvers,
|
|
context: async ({ request }) => {
|
|
const authorization = request.headers.get('Authorization')
|
|
|
|
return {
|
|
authorization
|
|
}
|
|
}
|
|
})
|
|
)
|
|
.listen(3000)
|
|
```
|
|
|
|
## Config
|
|
|
|
This plugin extends Apollo's [ServerRegistration](https://www.apollographql.com/docs/apollo-server/api/apollo-server/#options) (which is `ApolloServer`'s' constructor parameter).
|
|
|
|
Below are the extended parameters for configuring Apollo Server with Elysia.
|
|
|
|
### path
|
|
|
|
@default `"/graphql"`
|
|
|
|
Path to expose Apollo Server.
|
|
|
|
---
|
|
|
|
### enablePlayground
|
|
|
|
@default `process.env.ENV !== 'production'`
|
|
|
|
Determine whether should Apollo should provide Apollo Playground.
|