Какой плагин gatsby-source использовать с API-интерфейсом Rails, используя gem graphql - PullRequest
0 голосов
/ 20 ноября 2018

Я создаю Rails API с использованием gem 'graphql' и хочу получить доступ к этому GraphQL API с помощью Gatsby.js внешнего интерфейса.Я пытался использовать плагин gatsby-source-apiserver и gatsby-source-graphql , но ни один из них, похоже, не работает.(API работает нормально, когда я выполняю запросы с помощью приложения GraphiQL на моей локальной машине.)

Существует ли лучший исходный плагин Gatsby.js, который будет хорошо работать с Rails API, использующим gem 'graphql',которая обеспечивает единственную конечную точку, http://localhost:3000/graphql?И если да, то как мне настроить этот плагин в gatsby-config.js и т. Д.?(Кстати, я использую базу данных Postgres, которую я собираюсь развернуть в Heroku - я думал о том, чтобы продолжить hasura , но я не уверен, что это лучший вариант.)

В Rails API в routes.rb я настроил post "/graphql", to: "graphql#execute" для маршрутизации на GraphqlController.Вот метод execute в контроллере ...

def execute
  variables = ensure_hash(params[:variables])
  query = params[:query]
  operation_name = params[:operationName]
  context = {
    # Query context goes here, for example:
    # current_user: current_user,
  }
  result = GraphqlRailsSchema.execute(query, variables: variables, context: context, operation_name: operation_name)
  render json: result
  rescue => e
  raise e unless Rails.env.development?
  handle_error_in_development e
end

Когда я пытаюсь отобразить json: result, result имеет значение: #<GraphQL::Query::Result @query=... @to_h={"errors"=>[{"message"=>"No query string was present"}]}> для любой из внешних настроекЯ привожу ниже ....

В моем интерфейсе Gatsby.js, когда я использую gatsby-source-apiserver , в gatsby-config.js, у меня есть ...

{
  resolve: 'gatsby-source-apiserver',
  options: {
    typePrefix: 'internal__',
    url: `http://localhost:3000/graphql`,
    method: 'post',
    headers: {
      'Content-Type': 'application/json'
    },
    data: {

    },
    name: `posts`,
    entityLevel: `data.posts`,
    payloadKey: `body`,
  }
},

... и я получаю его ошибку в своей консоли, когда я запускаю gatsby develop ...

TypeError: Cannot read property 'data' of undefined

И, когда я использую gatsby-source-graphql , у меня это есть в gatsby-config.js ...

{
  resolve: "gatsby-source-graphql",
  options: {
    // This type will contain remote schema Query type
    typeName: "Authors",
    // This is field under which it's accessible
    fieldName: "authors",
    // Url to query from
    url: "http://localhost:3000/graphql",
  },
},

... и я получаю его ошибку в консоли, когда запускаю gatsby develop ...

Error: Cannot find module 'gatsby/graphql'

Как видите, я запутался в том, как подключить schemas между интерфейсом и сервером здесь.Любая помощь по этому вопросу будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...