Shopify: получить userErrors из checkoutLineItemsReplace Mutation

У меня есть эта мутация, и я пытаюсь получить доступ к userErrors, но я не могу получить код или поле, а сообщение - единственное, что я могу получить, или я что-то делаю не так? Мутация работает, потому что удаляет продукты, но когда возникает какая-то ошибка, мне нужно перейти к коду или полю, чтобы выполнить определенное действие.

export const ITEM_REMOVED = gql`
    mutation checkoutLineItemsReplace($lineItems: [CheckoutLineItemInput!] !, $checkoutId: ID!) {
        checkoutLineItemsReplace(lineItems: $lineItems, checkoutId: $checkoutId) {
            userErrors {
                code
                field
                message
            }
            checkout {
                ...CheckoutFragment
            }
        }
    }
    ${CHECKOUT_FRAGMENT}
`


const [mutationItemRemoved] = useMutation(ITEM_REMOVED)

// Item removed
const itemRemoved = (lineItems) => {
    mutationItemRemoved({
        variables: {
            checkoutId: props.checkout.id,
            lineItems,
        },
    }).then(r => {
        console.log(r.data.checkoutLineItemsReplace.checkout)
        props.updateCheckout(r.data.checkoutLineItemsReplace.checkout)
    }).catch(error => {
        console.log(error.code) // undefined
        console.log(error.field) // undefined
        console.log(error.message)
    })
}

person SoldierCorp    schedule 07.05.2020    source источник
comment
Разве ошибки не находятся в успешном ответе (он же .then(r => r.errors)), а в r.errors?   -  person drip    schedule 07.05.2020
comment
Если это так, то он никогда не будет доступен, потому что входит в блок .catch, когда происходит какая-то ошибка.   -  person SoldierCorp    schedule 07.05.2020
comment
Если он входит в блок catch, это означает, что есть синтаксическая ошибка или что-то еще, а не то, что запрос возвращает ошибку. Если запрос действителен, он всегда будет возвращать статус 200 и возвращать успех, даже если вы передадите неверный идентификатор варианта. У вас должна быть ошибка кода, а не ошибка ответа GraphQL. По крайней мере, это рабочий процесс по умолчанию для GraphQL, если вы используете для этого конкретную библиотеку, я ничего не могу гарантировать.   -  person drip    schedule 07.05.2020
comment
Понятно, я проверю это еще раз, потому что мутации фактически работают над добавлением или удалением элементов, и единственная ошибка, которую я могу получить, - это сообщение в блоке catch, которое является ожидаемым, но код - это тот, который мне нужен, поскольку сообщение может измениться в какой-то момент. Я использую Storefront API и Apollo.   -  person SoldierCorp    schedule 07.05.2020
comment
У меня мало опыта работы с Apollo, поэтому я не могу точно сказать, разделяют ли они ответ там и выдают ли ошибку, если есть ошибки GraphQL. На этот вопрос должен ответить кто-то с большим опытом. Удачи.   -  person drip    schedule 07.05.2020


Ответы (1)


Я почти уверен, что Shopify не реализовал code возврат на userErrors. Они вернут код на errors, который включает расширения. Но userErrors, похоже, возвращает только field и message, а field часто пусто.

person damask    schedule 14.05.2021