首页 > 解决方案 > GraphQL 不考虑字符串的动态数组有效字符串

问题描述

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

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"

谁能解释一下?

标签: graphqlapollo

解决方案


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

"1234567890123456789,1234567890123456790"

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

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

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

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

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

推荐阅读