将数组发送到graphQL端点

时间:2016-10-28 03:05:59

标签: graphql graphql-js

设置了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 app查询GraphQL?

1 个答案:

答案 0 :(得分:4)

如果您尝试传递复杂选项,最好的方法是使用variables。这样,您就不必担心将任何内容格式化为查询字符串。

所以你会发送这样的请求:

{
  "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": []
  }
}

如果您之前使用过SQL,则相当于在查询中使用?并分别传递参数。基本上,您不应该在应用程序中手动序列化和连接查询,因为变量是专门为这种情况设计的。

事实上,正如我们在this blog post中所概述的那样,将查询保持为完全静态字符串有很多很好的理由。