Переменные в запросах
💡[Устарело | 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.
Вот пример кода, который использует переменные
mutation CreateMetafieldDefinition($definition: MetafieldDefinitionInput!) {
metafieldDefinitionCreate(definition: $definition) {
createdDefinition {
id
namespace
key
access
}
userErrors {
field
message
code
}
}
}
Переменные
Переменная “definition” здесь является объектом
{
"definition": {
"name": "My read-only metafield definition",
"namespace": "$app:some-namespace",
"key": "some-key",
"type": "single_line_text_field",
"ownerType": "PRODUCT",
"access": {
"admin": "MERCHANT_READ",
"storefront": "PUBLIC_READ"
}
}
}
Без использования переменных
Вот тот же код с входным объектом, встроенным непосредственно в запрос
Обратите внимание на следующие различия:
- Свойства объекта не имеют кавычек
- перечисления настроек также не имеют кавычек вокруг них
- не используется типизация
metafieldDefinitionInput
mutation {
metafieldDefinitionCreate(
definition: {
name: "My read-only metafield definition"
namespace: "$app:some-namespace"
key: "some-key7"
type: "single_line_text_field"
ownerType: PRODUCT
access: {
admin: MERCHANT_READ,
storefront: PUBLIC_READ
}
}
) {
createdDefinition {
id
namespace
key
access {
admin
storefront
}
}
userErrors {
field
message
code
}
}
}
Дополнительно о запросах: Queries and Mutations | GraphQL
Переменные, прикрепленные к телу запроса
- Запрос
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: "materials", namespace: "my_fields", ownerId: "gid://shopify/Product/20995642", type: "multi_line_text_field", value: "95% Cotton\n5% Spandex", }, { key: "manufactured", namespace: "my_fields", ownerId: "gid://shopify/Product/20995642", type: "single_line_text_field", value: "Made in Canada", }, ], }, }, }); - Input variables
{ "metafields": [ { "key": "materials", "namespace": "my_fields", "ownerId": "gid://shopify/Product/20995642", "type": "multi_line_text_field", "value": "95% Cotton\n5% Spandex" }, { "key": "manufactured", "namespace": "my_fields", "ownerId": "gid://shopify/Product/20995642", "type": "single_line_text_field", "value": "Made in Canada" } ] } - Response JSON
{ "metafieldsSet": { "metafields": [ { "key": "materials", "namespace": "my_fields", "value": "95% Cotton\n5% Spandex", "createdAt": "2024-03-27T13:45:34Z", "updatedAt": "2024-03-27T13:45:34Z" }, { "key": "manufactured", "namespace": "my_fields", "value": "Made in Canada", "createdAt": "2024-03-27T13:45:34Z", "updatedAt": "2024-03-27T13:45:34Z" } ], "userErrors": [] } }
Примеры → Изменение и обновление метаполей → Node.js
Переменные, переданные как аргумент запроса
-
Запрос
const productQuery = ` query ProductQuery($handle: String) { product(handle: $handle) { id title handle } } `; const { data, errors, extensions } = await client.request(productQuery, { variables: { handle: "sample-product", }, });
Запрос для продукта
shopify-app-js/packages/api-clients/graphql-client at main · Shopify/shopify-app-js
Пример работающего кода с передачей массива полей
class SettingMetafield {
namespace = "app_namespace";
type = "single_line_text_field";
ownerId = appInstallationID;
constructor(key, value) {
this.key = key;
this.value = value;
}
}
const metafields = [
prerenderAndPrefetchMetafield,
prerenderMetafield,
timeoutMetafield,
throttleMetafield,
];
// console.log(metafields);
const setMetafieldsQuery = `
mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
metafieldsSet(metafields: $metafields) {
metafields {
id
namespace
key
}
userErrors {
field
message
}
}
}
`;
// console.log(setMetafieldsQuery);
gqlResponse = await client.request(setMetafieldsQuery, {
variables: {
metafields: [...metafields],
// metafields: metafields; // same, spread operator isn't necessary here
// metafields; // same, shorthand syntax, because the key is the same as value
},
});