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

Nuxt3组合式函数中如何获取完整的graphQLErrors信息?

解决Nuxt3中useAsyncQuery无法获取完整graphQLErrors的问题

针对你遇到的useAsyncQuery返回的error仅包含message,无法获取extensions、path等完整GraphQL错误属性的问题,给你几个可行的解决办法:

方法一:通过apollo:error钩子获取完整错误

既然你已经在plugins/apollo.ts里触发了apollo:error钩子,就可以在组件或页面中直接监听这个钩子来拿到完整的错误对象:

// 在组件/页面中
const nuxtApp = useNuxtApp();

// 监听全局apollo错误
nuxtApp.hook('apollo:error', (error) => {
  // 这里的error包含完整的graphQLErrors、networkError等属性
  console.log(error.graphQLErrors); // 包含path、extensions等信息
});

// 或者在执行useAsyncQuery时临时监听
async function fetchData() {
  let fullError = null;
  const hook = nuxtApp.hook('apollo:error', (err) => {
    fullError = err;
  });

  const { data, error } = await useAsyncQuery<{ my_service: { blabla: BlablaGraph} }>(params);
  
  hook(); // 移除钩子,避免重复触发
  
  if (fullError) {
    // 这里可以访问完整的错误信息
    console.log(fullError.graphQLErrors[0].extensions);
    console.log(fullError.graphQLErrors[0].path);
  }
}

方法二:直接使用ApolloClient实例查询

绕过useAsyncQuery的封装,直接获取ApolloClient实例执行查询,这样能拿到最原始的响应结果:

const { client } = useApollo(); // 获取当前Apollo客户端

async function fetchData() {
  try {
    const result = await client.query({
      query: params.query, // 你的GraphQL查询语句
      variables: params.variables // 变量参数
    });
    const data = result.data;
  } catch (error) {
    // 这里的error包含完整的graphQLErrors
    console.log(error.graphQLErrors);
  }
}

方法三:修改Apollo Error Link,将完整错误挂载到全局或传递给组件

你可以在plugins/apollo.ts的errorLink里,把完整错误存储到NuxtApp的状态中,之后在组件里读取:

// plugins/apollo.ts
const errorLink = onError(error => {
    nuxtApp.callHook('apollo:error', error);
    // 将错误存储到nuxtApp的全局属性中
    nuxtApp._apolloLastError = error;
});

// 在组件中
const nuxtApp = useNuxtApp();

async function fetchData() {
  const { data, error } = await useAsyncQuery<{ my_service: { blabla: BlablaGraph} }>(params);
  
  if (error.value) {
    const fullError = nuxtApp._apolloLastError;
    console.log(fullError.graphQLErrors);
  }
}

注意:因为你使用的是@nuxtjs/apollo的alpha版本(5.0.0-alpha.6),这个版本可能还存在一些API封装不完整的问题,上述方法都是基于现有功能的临时解决方案,后续版本可能会完善useAsyncQuery的错误返回结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:57:04