如何将变量传递给 metafields 在 Shopify Api Node js Graphql 客户端中设置突变?

How to pass variables to metafieldsSet mutation in Shopify Api Node js Grahql client?

我试图使用 metafieldsSet 突变来更新 Shopify 中的元字段,代码如下:

const client = new Shopify.Clients.Graphql(
        process.env.SHOP,
        process.env.PASSWORD
    )
    try {
        const metafields = await client.query({
            data: `mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
                metafieldsSet(metafields: $metafields) {
                    userErrors {
                        field
                        message
                    }
                    metafields {
                        key
                        value
                    }
                }
            }           
            `,
            query: {
                metafields: [
                    {
                        key: 'cb_inventory',
                        namespace: 'my_fields',
                        ownerId: 'gid://shopify/ProductVariant/40576138313890',
                        type: 'number_integer',
                        value: '25',
                    },
                ],
            },
        })
        console.log(metafields)
        res.status(200).json({ values: metafields })
    } catch (error) {
        console.log(error)
        res.status(500).json(error)
    }

但是上面的突变returns出现如下错误:

Expected value to not be null
Variable $metafields of type [MetafieldsSetInput!]! was provided invalid value

我假设变量 metafields 未能传递到突变中,因为当我 运行 在 Shopify Admin API GraphiQL explorer 中完全相同的突变时,没有错误 Shopify Admin API GraphiQL explorer mutation result

我也查看了@shopify/shopify-api 的github repo。在我的理解中,变量被添加到 query 对象。

我错过了什么?

谢谢,

霍华德

环境:下一个 js 11.1.2,

依赖项:@shopify/shopify-api1.4.1

原来语法不正确。变量应放在 variables 对象内,而变异语句应放在 query 对象内。

以下代码现在有效:

const metafields = await client.query({
   data: {
      query: `mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
         metafieldsSet(metafields: $metafields) {
            userErrors {
               field
               message
            }
            metafields {
                key
                value
            }
         }
    }`,
       variables: {
           metafields: [
              {
                 key: 'cb_inventory',
                 namespace: 'my_fields',
                 ownerId: 'gid://shopify/ProductVariant/40576138313890',
                  type: 'number_integer',
                value: '25',
             },
           ],
       },
   },
})

参考:https://github.com/Shopify/shopify-node-api/blob/main/src/clients/graphql/test/graphql_client.test.ts

要使用预期的 API 版本,您需要先使用以下代码初始化上下文:

Shopify.Context.initialize({
    API_KEY,
    API_SECRET_KEY,
    SCOPES: ['read_products', 'write_products'],
    HOST_NAME: HOST,
    API_VERSION: '2021-10',
})