You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Link如何将错误包装进响应数据中

解决方案

要实现将错误统一包装进响应数据,让返回结果同时包含data.data和data.error,可以通过修改wrapDataLink并调整链接执行顺序来完成:

1. 完善wrapDataLink逻辑

利用Apollo Link的Observable操作符,捕获成功响应和网络错误,统一包装结构:

import { ApolloLink } from '@apollo/client';

export const wrapDataLink = new ApolloLink((operation, forward) => {
  return forward(operation)
    // 处理成功响应,提取数据和GraphQL错误
    .map((response) => {
      const { data, errors } = response;
      return {
        data: {
          data: data,
          // 可根据需求调整错误格式,比如返回全部错误而非第一个
          error: errors ? errors[0] : null
        }
      };
    })
    // 捕获网络错误(如请求超时、连接失败等)
    .catch((networkError) => {
      return {
        data: {
          data: null,
          error: networkError
        }
      };
    });
});

2. 调整链接执行顺序

Apollo Link按数组顺序链式执行,需确保errorLink先处理错误逻辑,再由wrapDataLink统一包装结果:

import { ApolloClient, InMemoryCache, from } from '@apollo/client';
import { RestLink } from 'apollo-link-rest';

// 初始化restLink(根据你的实际配置调整)
const restLink = new RestLink({
  uri: '你的API地址'
});

const client = new ApolloClient({
  link: from([
    errorLink,   // 优先处理错误逻辑(如鉴权错误)
    wrapDataLink,// 统一包装响应结构
    restLink     // 最后执行REST请求
  ]),
  cache: new InMemoryCache()
});

注意事项

  • 若你的errorLink中针对特定错误(如鉴权错误)做了终止请求的处理,需确保后续流程仍能进入wrapDataLink的包装逻辑;
  • 错误格式可根据业务需求调整,比如返回所有graphQLErrors而非仅第一个,或格式化错误信息为更易处理的结构。

内容的提问来源于stack exchange,提问作者Anil Bhaskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:55:18