2017-05-25 9 views
2

Djangoを使用してGrapheneサーバをセットアップしました。私がGraphiQL(Webクライアント)を通してクエリを実行すると、すべて正常に動作します。しかし、どこからでも実行すると、「クエリ文字列を指定する必要があります」というエラーが表示されます。Graphene Django "クエリ文字列を指定する必要があります"

トラブルシューティングをいくつか行いました。 GraphiQLは、Content-Type: application/jsonを使用してGraphQLサーバーにPOSTデータを送信します。ここで私はGraphiQL用クロームネットワーク]タブからコピーされたリクエストのボディは、次のとおりです。

{"query":"query PartnersQuery {\n partners{\n name\n url\n logo\n }\n}","variables":"null","operationName":"PartnersQuery"} 

私はContent-Type: application/jsonとポストマンにそれをコピーすると、私は次の応答を得る:

{ 
    "errors": [ 
    { 
     "message": "Must provide query string." 
    } 
    ] 
} 

ことができるものこの問題の原因?私はスキーマに夢中になっていません。 grapheneのドキュメントからチュートリアルをたどっただけです。このような問題を引き起こす原因はほかにありますか?

答えて

1

サンプルアプリをチェックアウトし、機能を確認してください。

https://github.com/mjtamlyn/graphene-tutorial 彼らは、次の手順を実行します。parse_bodyが入ってくるデータを解析することができないとき

from django.views.decorators.csrf import csrf_exempt 
from graphene_django.views import GraphQLView 

url(r'^explore', GraphQLView.as_view(graphiql=True)), 
url(r'^graphql', csrf_exempt(GraphQLView.as_view())), 
2

このエラーが発生します。私は、このメソッドに渡されたデータを見て、それが正しいタイプであることを確認することから始めます。

例えば、multipart/form-dataセクションはrequest.POSTを返します。たとえば、apollo-upload-clientがファイルアップロード処理のために送信する要求を処理するために上書きする必要があります。 ここでは、ログインが必要で、apollo-upload-clientユースケースをサポートするビューを作成しました。これは正常に動作します。

1

は、ここで私は、単純な変異を有するグラフェンDjangoのバックエンドを使用したポストマンからの正常な応答を取得することができた方法は次のとおりです。

  1. あなたgraphQLエンドポイント、例えばにURLを追加
  2. を投稿するSetメソッド身体ウィンドウに「生」に身体を設定し
  3. を「アプリケーション/ jsonの」
  4. クエリで貼り付け、例えば:「Content-Typeの」、値:キー - http://localhost:8000/api/
  5. 1つのヘッダを追加します。 {"query":"{myModels {id}}","variables":"null","operationName":null}

これはあなたのやり方とよく似ているので、近くにする必要があります。

0

オリジナルのポスター、Gasimとまったく同じ問題が発生しました。 'graphiql.html'のコードを調べると、クエリの文字列がの本文にURLのクエリパラメータに変換されていることがわかります。したがって、あなたはポストマンを経由して送信され、このURLで終わる:

http://127.0.0.1:8000/graphql?query=%7B%0A%20%20allCategories%20%7B%0A%20%20%20%20edges%20%7B%0A%20%20%20%20%20%20node%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20ingredients%20%7B%0A%20%20%20%20%20%20%20%20%20%20edges%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20node%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A

あまりにもURLのクエリ文字列でにあります正確に何を複製するために私には無意味なようだが、それは唯一のように見えます有効な応答を返すようにGrapheneサーバーを取得する方法。

確かにこれは修正されるバグ/欠点ですか?

ロバート

0

私のコードでの問題は、私はgraphQLため不適切URLセットアップを持っていたことでした。私は以下を持っていた:

url(r'^graphql/', GraphQLView.as_view()) 

スラッシュは大きな違いがありました。それを削除すると問題が解決しました。適切な方法は次のとおりです。

url(r'^graphql', GraphQLView.as_view()) 
関連する問題