GraphQL产品查询访问被拒绝

时间:2019-04-02 07:40:35

标签: graphql shopify

我对一个GraphQL查询有些困惑。

{
  collectionByHandle(handle:"price") {
    products(first: 16, sortKey:PRICE, query:"title:Bracelet"){
      edges {
        cursor
        node {
          title
        }
      }
    }
  }
}

该错误来自query参数,该参数在“自定义”集合中不受支持,但在“智能”集合中。

  

查询:字符串

     

仅当集合是智能的时才使用此字段。如果集合是自定义的,则返回错误。支持的过滤器参数:

     
      
  • 标题
  •   
  • product_type
  •   
  • 供应商
  •   
  • 礼品卡
  •   
  • created_at
  •   
  • updated_at
  •   

因此,当我使用自定义集合时,会得到预期的错误结果:

{
  "data": {
    "collectionByHandle": null
  },
  "errors": [
    {
      "message": "Cannot filter by query if the collection is a custom collection.",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "collectionByHandle",
        "products"
      ]
    }
  ]
}

但是当我使用智能收藏夹时,我会得到Access Denied

{
  "data": {
    "collectionByHandle": null
  },
  "errors": [
    {
      "message": "access denied",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "collectionByHandle",
        "products"
      ]
    }
  ]
}

来自前端的错误消息是这样的:

  

“字段'产品'不接受参数'查询'”

因此,如果指定了查询参数仅适用于Smart Collections,并且确实将集合设置为智能对象,则我看不出任何原因导致此请求无法正常工作。

关于为什么我将collectionByHandleproducts一起使用的原因,我需要按价格对产品进行排序,并且如果我不将其包含在集合中,则不允许按价格对产品进行排序。

以下是该问题的视频演示:https://streamable.com/sevtf

对问题的任何见解将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果要查询products下的queryroot连接,则可以使用query参数:

{
    products(first: 16, sortKey:PRICE, query:"title:Bracelet"){
        edges {
            cursor
            node {
                title
            }
        }
    }
}

但是,如果您使用的是Collection(就像上面的代码一样),则products连接只有6个受支持的参数:{{1 }},afterbeforefirstlastreverse 但不是 { {1}}。

Shopify help page对此提供了更多信息。

答案 1 :(得分:0)

您使用了错误的API端点。 我假设您使用storeFront API,请尝试执行以下操作:/api/2019-10/graphql.json

Document