1 minute read

💡 [Устарело | 12.0.0] Метод query устарел и был заменен методом request. См. руководство по миграции: https://github.com/Shopify/shopify-app-js/blob/main/packages/apps/shopify-api/docs/migrating-to-v9.md#using-the-new-clients.

У нас есть пример кода из metafieldsSet пример Node.js

Объект variables содержит массив metafields

const client = new shopify.clients.Graphql({ session });
const data = await client.query({
  data: {
    query: `mutation MetafieldsSet($metafields: [MetafieldsSetInput!]!) {
      metafieldsSet(metafields: $metafields) {
        metafields {
          key
          namespace
          value
          createdAt
          updatedAt
        }
        userErrors {
          field
          message
          code
        }
      }
    }`,
    variables: {
      metafields: [
        {
          key: "example_key",
          namespace: "example_namespace",
          ownerId: "gid://shopify/Product/20995642",
          type: "single_line_text_field",
          value: "Example Value",
        },
      ],
    },
  },
});

Если вы хотите изменить название variables или metafields, вы можете сделать это только с помощью встроенного переименования JS.

Ключ в объекте variables должен оставаться metafields, поскольку GraphQL-мутация явно требует этого.

const someArray = [
  {
    key: "example_key",
    namespace: "example_namespace",
    ownerId: "gid://shopify/Product/20995642",
    type: "single_line_text_field",
    value: "Example Value",
  },
];

const somethingElse = { metafields: someArray }; // Сопоставляем 'someArray' обратно к 'metafields'

const client = new shopify.clients.Graphql({ session });
const data = await client.query({
  data: {
    query: `mutation MetafieldsSet($metafields: [MetafieldsSetInput!]!) {
      metafieldsSet(metafields: $metafields) {
        metafields {
          key
          namespace
          value
          createdAt
          updatedAt
        }
        userErrors {
          field
          message
          code
        }
      }
    }`,
    variables: somethingElse, // Передаем 'somethingElse', содержащий 'metafields'
  },
});

Почему это строго?

Схема GraphQL обеспечивает соблюдение строгих соглашений об именах для привязки переменных, передаваемых от вашего клиента к аргументам мутации или запроса на сервере. Если имена не совпадают:

  • Сервер не будет знать, какую переменную вы пытаетесь привязать.
  • Вы, скорее всего, получите ошибку типа Variable "$metafields" is not defined или Cannot query field "metafieldsSet" without required arguments.