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

升级@graphql-mesh至最新版本时sdkRequesterFactory报错如何解决

@graphql-mesh 升级后 sdkRequester 适配 sdkRequesterFactory 方案

本次升级涉及的依赖版本

"@graphql-mesh/cache-file": "^0.8.23",
"@graphql-mesh/cache-inmemory-lru": "^0.6.18",
"@graphql-mesh/cache-redis": "^0.9.8",
"@graphql-mesh/cli": "^0.71.3",
"@graphql-mesh/config": "0.37.3",
"@graphql-mesh/graphql": "^0.26.2",
"@graphql-mesh/merger-stitching": "^0.15.52",
"@graphql-mesh/runtime": "^0.35.2",
"@graphql-mesh/transform-cache": "^0.12.13",

问题现象

依赖升级完成后运行抛出异常,旧版本中直接从getMesh返回值解构的sdkRequester在新版本中被替换为sdkRequesterFactory,多次调试写法均无法正常运行。
报错截图

调试阶段编写的问题代码

import { getMesh } from '@graphql-mesh/runtime';
import { findAndParseConfig } from '@graphql-mesh/cli';

import { getSdk } from './__generated__/sdk'; 

async function load() {
  const meshConfig = await findAndParseConfig();
  const {sdkRequesterFactory, meshContext }= await getMesh(meshConfig);  
  const sdkRequester = sdkRequesterFactory(meshContext);
  const sdk = getSdk(sdkRequester);
  return sdk;
}

旧版本可正常运行的参考代码

import { getMesh } from '@graphql-mesh/runtime';
import { findAndParseConfig } from '@graphql-mesh/config';

import { getSdk } from './__generated__/sdk';

async function load() {
  const meshConfig = await findAndParseConfig();
  const { sdkRequester } = await getMesh(meshConfig);

  const sdk = getSdk(sdkRequester);

  return sdk;
}

async function loadMesh() {
  try {
    const sdk = await load();
    return sdk;
  } catch (error) {
    console.error('createServiceBinding Error', error);
    throw new Error(`Mesh SDK Load error: ${error}`);
  }
}

export default loadMesh;

修复方案

报错由两个写法错误导致:

  • 新版本getMesh返回值中不存在meshContext属性,解构该值得到的是undefined
  • sdkRequesterFactory的设计目的是支持自定义请求上下文,无自定义需求时直接调用即可,不需要传入参数,工厂函数会自动使用Mesh默认生成的上下文。

修复后的完整可运行代码:

import { getMesh } from '@graphql-mesh/runtime';
import { findAndParseConfig } from '@graphql-mesh/config';
import { getSdk } from './__generated__/sdk';

async function load() {
  const meshConfig = await findAndParseConfig();
  const { sdkRequesterFactory } = await getMesh(meshConfig);
  // 直接调用工厂函数生成requester,无需传参
  const sdkRequester = sdkRequesterFactory();
  const sdk = getSdk(sdkRequester);
  return sdk;
}

async function loadMesh() {
  try {
    const sdk = await load();
    return sdk;
  } catch (error) {
    console.error('createServiceBinding Error', error);
    throw new Error(`Mesh SDK Load error: ${error}`);
  }
}

export default loadMesh;

如果后续有单次请求自定义上下文的需求,调用sdkRequesterFactory时传入对应上下文对象即可:

const customContext = { userId: '123', requestId: 'xxx' };
const sdkRequester = sdkRequesterFactory(customContext);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:16:04