3
respostas

GraphQL e Hapi.js

Boa noite!

Estou tentando integrar o GraphQL como um plugin/módulo do Hapi.js em uma API.

Pelo que encontrei pela web, teria que usar o package npm graphql-server-hapi para fazer essa integração.

Segui a documentação do site da Apollo Developers http://dev.apollodata.com/tools/apollo-server/setup.html

Até o momento estou conseguindo renderizar já a GraphiQL UI na rota /graphiql. Porém ao acessar essa rota, a área de Docs fica como "No schema available" , e na coluna das respostas:

{
  "statusCode": 404,
  "error": "Not Found",
  "message": "Not Found"
}

Dessa maneira não consigo fazer nenhuma requisição. No console aparece um erro do POST do formulário para /graphql? como se ele não encontra-se a rota. E no terminal tenho a seguinte mensagem:

node index.js 
(node:8932) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Plugin graphql already registered in: http://localhost:3010
(node:8932) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
servidor rodando em http://localhost:3010

index.js da aplicação:

const Hapi = require('hapi')
const server = new Hapi.Server()

server.connection(require('./config/config').server)

server.register([
    {
        register: require('./modules/company')
    },
    {
        register: require('./modules/graphQL')
    }
], (err) => {
        if (err) console.log('failed to load plugin: ', err)
    }
)

server.start((err) => {
    if(err) console.log(err)
    console.log(`servidor rodando em ${server.info.uri}`)
})

graphQL/index.js:

const { graphqlHapi, graphiqlHapi } = require('apollo-server-hapi')
const { makeExecutableSchema } = require('graphql-tools')
const schema = require('./schema')
const resolvers = require('./resolvers')


const newSchema = makeExecutableSchema({
    typeDefs: schema,
    resolvers: resolvers
})


exports.register = function(server, options, next) {

    server.register({
        register: graphqlHapi,
        options: {
          path: '/graphql',
          graphqlOptions: {
              schema: schema
          }
        }
    })

    server.register({
      register: graphiqlHapi,
      options: {
        path: '/graphiql',
        graphiqlOptions: {
          endpointURL: '/graphql'
        }
      }
    });

    next()
}

exports.register.attributes = {
    pkg: require('./package.json')
}

Caso alguém puder ajudar agradeço.

Obrigado!

3 respostas

Alison, com Hapi eu não encontrei muitos materiais, mas no site do GraphQL eles tem um tutorial bem bacana passo a passao usando node com Express se não me engano: https://www.howtographql.com

Espero ter ajudado :)

Boa noite Mario!

Realmente, eu também achei bastante coisa com Express. É que como comecei a usar o Hapi recentemente, e acabei gostando da forma de trabalhar com ele, estou procurando alguma integração entre o mesmo com o GraphQL.

Mas muito obrigado pela ajuda Mario.

Bom, minha recomendação então seria você tentar implementar tudo com Express e tentar migrar a lógica para o Hapi :)