Я создаю 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
между интерфейсом и сервером здесь.Любая помощь по этому вопросу будет принята с благодарностью!