Apollo订阅查询Error无extensions字段,回调未返回完整错误详情
解决Apollo Subscription错误缺少extensions字段的问题
排查与修复方案
- 升级Apollo Client版本:部分旧版Apollo Client存在Subscription错误字段丢失的bug,升级到
@apollo/client@3.8+这类稳定新版本,通常能直接解决问题。 - 自定义Error Link拦截处理:如果升级无效,通过自定义链路拦截响应,手动保留
extensions字段:import { ApolloLink } from '@apollo/client'; const errorLink = new ApolloLink((operation, forward) => { return forward(operation).map(response => { if (response.errors) { response.errors = response.errors.map(error => ({ ...error, extensions: error.extensions || {} })); } return response; }); }); // 把errorLink加入Apollo Client的链路链 const client = new ApolloClient({ link: ApolloLink.from([errorLink, /* 其他链路 */]), cache: new InMemoryCache() }); - 验证服务器端响应结构:确认WebSocket返回的帧数据中,
errors数组确实包含完整的extensions字段(虽然网络面板显示完整,但可再核对WebSocket帧的原始内容)。 - 调整订阅回调的错误读取逻辑:在
onError回调中直接读取原始错误对象的extensions属性,避免依赖框架简化后的错误结构:client.subscribe({ query: MY_SUBSCRIPTION }) .subscribe({ next: data => console.log(data), error: err => { const errorCode = err?.extensions?.code; const errorType = err?.extensions?.type; // 处理错误详情 } });
内容的提问来源于stack exchange,提问作者Farwa MIraj
相关产品推荐
相关产品推荐

