GraphQL 不考虑动态字符串数组有效字符串

GraphQL doesn't consider dynamic arrays of strings valid strings

我有一个手动输入时有效的查询:

queryName(where: { ids: ["1234567890123456789", "1234567890123456790"] }, offset: 0, max: 10) {

但是当在变量中传递相同的值时:

const idArr = ["1234567890123456789", "1234567890123456790"];
...
queryName(where: { ids: ${idArr} }, offset: 0, max: 10) {

我收到错误:

Uncaught GraphQLError: Syntax Error: Expected Name, found Int "1234567890123456789"

谁能解释一下?

像这样使用字符串插值将导致在您的字符串中插入以下值:

"1234567890123456789,1234567890123456790"

这不是有效的 GraphQL 语法,因此会导致语法错误。您应该使用 GraphQL variables 来提供动态值以及您的查询,而不是使用字符串插值:

query ($idArr: [ID!]!) {
  queryName(where: { ids: $idArr }, offset: 0, max: 10) {
    ...
  }
}

请注意,变量的类型将取决于使用它的参数,这取决于您实际查询的架构。

如何将变量与您的请求一起包含取决于您用来发出该请求的客户端,您的 post 并不清楚这一点。如果您使用 fetch 或其他一些简单的 HTTP 客户端,您只需将变量作为另一个 属性 包含在查询旁边,作为您发送到服务器的有效负载:

{
  "query": "...",
  "variables": {
    ...
  }
}