【发布时间】:2020-08-22 15:34:32
【问题描述】:
我有这个突变,我正在尝试访问 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)
})
}
【问题讨论】:
-
错误不是位于成功响应中(又名
.then(r => r.errors)),而是位于r.errors下? -
如果是这样,那么它将永远无法访问,因为发生某些错误时正在进入 .catch 块
-
如果它进入了 catch 块,这意味着存在语法错误或其他问题,而不是查询返回错误。如果查询有效,它将始终返回状态 200 并返回成功,即使您传递了无效的变体 ID。您必须有代码错误而不是 GraphQL 响应错误。如果您为此使用特定的库,至少这是 GraphQL 的默认工作流程,我不能保证什么都没有。
-
我明白了,我会再次检查它,因为突变实际上正在添加或删除项目,我能得到的唯一错误是 catch 块中的消息,并且是预期的消息,但代码是我需要的那个,因为消息可能会在某个时候改变。我正在使用 Storefront API 和 Apollo。
-
我没有太多 Apollo 经验,所以我不能确定他们是否在那里拆分响应并在出现 GraphQL 错误时抛出错误。这需要有更多经验的人来回答。祝你好运。
标签: shopify shopify-storefront-api