将数组发送到 graphQL 端点

sending an array to graphQL endpoint

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?

如果您尝试传递复杂的选项,最好的方法是使用 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.

中概述的那样,有很多重要的理由让您的查询保持完全静态字符串