adonis-graphql v1.0.1-alpha-4
Adonis GraphQL :rocket:
Adonis GraphQL is a wrapper around apollo-server-adonis to provide a better experience writing Schema and Resolvers.
Setup
The package must be installed by using adonis command.
> adonis install adonis-graphqlYou can use directly npm or yarn but the instructions (instructions.js and instructions.md) will not be displayed and ran.
:warning: This package requires
@adonisjs/bodyparserto be installed.
Bind GraphQL Endpoint
You can bind the GraphQL endpoint directly from your routes.js file.
In this example, we are using the / route to handle all graphql query.
const Route = use('Route')
const GraphQLServer = use('GraphQLServer')
Route.post('/', (context) => {
return GraphQLServer.handle(context)
})
Route.get('/graphiql', (context) => {
return GraphQLServer.handleUI(context)
})
// or add options (example)
Route.get("/graphiql", (context) => {
return GraphQLServer.handleUI(context, {
passHeader: `'Authorization': '${context.request.header("Authorization")}'`
})
})
// or change options in file `config/graphql.js`Create Schema
All schema are defined by default in the app/Schema directory. You can change this by editing the configuration config/graphql.js.
To define a schema, you must use the graphql extension and syntax.
# app/Schema/Hello.graphql
type Query {
hello: String
}Create Resolver
All schema are defined by default in the app/Resolvers directory. You can change this by editing the configuration config/graphql.js.
To define a resolver, you must return a JS Object.
// app/Resolvers/Hello.js
module.exports = {
Query: {
hello: () => 'World'
}
}Throw an error
GraphQL handles errors by a different way.
To provide a GraphQL Compliant error we recommend you to use the GraphQLError class.
// app/Resolvers/Hello.js
const GraphQLError = use('GraphQLError')
module.exports = {
Query: {
hello: function () {
throw new GraphQLError('Error Message', [...])
}
}
}If you are using the Adonis Validation Provider your code must look like the example bellow.
const validation = await validateAll(data, rules)
if (validation.fails()) {
throw new GraphQLError('Validation Failed', validation.messages())
}7 years ago
7 years ago
8 years ago
8 years ago
8 years ago