2016-10-28 10 views
1

graphQLサーバが設定されています。値がハードコーディングされている場合、正しく動作します。ここに私の呼び出し要求がある:graphQLエンドポイントに配列を送信する

"query": "mutation{ 
    createEvent(name: "+ name +", purpose: "+ purpose +", googleUserName: "+ googleUserName +", dateArray: "+ JSON.stringify(dateArray) +", attendees: []) 
    { 
     eventId 
     name 
     purpose 
     googleUserName 
     dateArray 
     attendees{ 
     attendeeName 
     personalizedDateSelection 
     } 
     } 
    }" 

これはエラーを与える:

{"errors": 
    [{"message": 
    "Syntax Error GraphQL request (1:88) Expected :, found Name \"dateArray\"\n\n1: mutation{createEvent(name: lakshman, purpose: test, googleUserName: Diwaakartg Ganesh, dateArray: [\"Wed, Nov 9th 2016\",\"Thu, Nov 10th 2016\",\"Thu, Nov 3rd 2016\",\"Wed, Nov 2nd 2016\"], attendees: []) 
     {eventId 
     name 
     purpose 
     googleUserName 
     dateArray 
     attendees{ 
      attendeeName 
      personalizedDateSelection 
      } 
     } 
    }\n}]}                      

何のアライメントエラーはありません。私は可読性を高めるためにそれを作った しかし、上記の突然変異は、引数がハードコードされていると正しく動作します。エラーの原因を見つけるのはかなり難しいです。私はJSON.stringify(dateArray)dateArrayだけを試してみました。

または、react-reduxアプリからGraphQLにクエリする方が良いですか?

答えて

4

複雑なオプションを渡そうとしている場合は、variablesを使用するのが最適です。そうすれば、クエリ文字列に何かを書式設定することを心配する必要はありません。

ですから、このようにリクエストを送信します:あなたが前にSQLで働いている場合は

{ 
    "query": ` 
    mutation CreateEvent(
     $name: String!, 
     $purpose: String!, 
     $googleUserName: String!, 
     $dateArray: [String], 
     $attendees: [String] 
    ) { 
     createEvent(
     name: $name, 
     purpose: $purpose, 
     googleUserName: $googleUserName, 
     dateArray: $dateArray, 
     attendees: $attendees 
    ) { 
     eventId 
     name 
     purpose 
     googleUserName 
     dateArray 
     attendees{ 
      attendeeName 
      personalizedDateSelection 
     } 
     } 
    } 
    `, 
    "variables": { 
    "name": "...", 
    "purpose": "...", 
    "googleUserName": "...", 
    "dateArray": [...], 
    "attendees": [] 
    } 
} 

、それはあなたのクエリで?を使用して、個別に引数を渡すのと同等です。基本的には、変数がそのケース専用に設計されているため、アプリ内でクエリを手動でシリアル化して連結しないでください。

this blog postで概説したように、実際は完全に静的な文字列としてクエリを保持する大きな理由がたくさんあります。

+0

!!この例をありがとう。しかし、[graphql-tag](https://github.com/apollostack/graphql-tag)のようないくつかのパッケージをインポートする必要がありますか?変数の部分は非常に涼しいですが、オンラインの実装を見つけることができませんでした。あなたは私のアプリでそれを使用するための精巧な指示を与える場合は助けになるだろう。 –

+0

あなたはどんなパッケージも必要としません、文字通り私が書いたフォームでPOSTリクエストを送ることができます。 – stubailo

+0

それは私の悪いことでした!雅は魅力的に働いた!私がブログを見ているとき、アポロクライアント、リレーなどについてのことがありました。私の見解では、reduxを使用しているので、リレーを実装する必要はありませんが、効率的であると主張するapollo-clientのようないくつかのgraphqlクライアントは、クエリ結果と楽観的な更新をキャッシュするのに役立ちます。あなたの考えを捨てる? –

関連する問題