Переименование объектов в запросах
💡 [Устарело | 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.