andruu / adonis-graphql

GraphQL Provider for AdonisJs Framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Adonis GraphQL 🚀

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-graphql

You can use directly npm or yarn but the instructions (instructions.js and instructions.md) will not be displayed and ran.

⚠️ This package requires @adonisjs/bodyparser to 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('Adonis/Addons/GraphQLServer')

const graphqlAdonisOptions = {
  debug: false
}

Route.post('/', function (context) {
  return GraphQLServer.handle(context, graphqlAdonisOptions)
})

Route.get('/graphiql', (context) => {
  return GraphQLServer.handleUI(context, { endpointURL: '/' })
})

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('Adonis/Addons/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())
}

About

GraphQL Provider for AdonisJs Framework

License:MIT License


Languages

Language:JavaScript 97.6%Language:HTML 2.4%