NodeJS+AWS Lambda环境中aws-appsync报fetch未找到错误求助
解决AWS Lambda中AWSAppSyncClient初始化时的"fetch is not found globally"错误
这个错误的核心原因是:AWS Lambda运行的Node.js环境默认没有全局的fetch API,而aws-appsync依赖的apollo-link-http组件会尝试调用全局fetch,找不到就会抛出这个异常。下面给你两种可行的解决办法:
方法一:全局polyfill fetch
- 先安装
node-fetch依赖:
npm install node-fetch
- 在初始化AWSAppSyncClient的代码开头,把fetch挂载到全局:
const fetch = require('node-fetch'); global.fetch = fetch; // 后续正常初始化客户端 const AWSAppSyncClient = require('aws-appsync').default; const client = new AWSAppSyncClient({ url: '你的AppSync端点URL', region: '你的AWS区域', auth: { type: 'API_KEY', // 按需替换成AWS_IAM、AMAZON_COGNITO_USER_POOLS等认证类型 apiKey: '你的AppSync API密钥' } });
方法二:直接给AWSAppSyncClient传入fetcher
不想污染全局变量的话,可以直接在客户端配置里指定fetcher:
- 同样先安装
node-fetch:
npm install node-fetch
- 初始化时添加
fetch配置项:
const fetch = require('node-fetch'); const AWSAppSyncClient = require('aws-appsync').default; const client = new AWSAppSyncClient({ url: '你的AppSync端点URL', region: '你的AWS区域', auth: { type: 'API_KEY', apiKey: '你的AppSync API密钥' }, fetch: fetch // 直接传入fetcher实例 });
额外提示
如果你的Lambda运行时是Node.js 18或更高版本,AWS已经在环境中内置了全局fetch,这种情况下不需要安装任何额外依赖,直接升级Lambda的运行时版本就能解决问题。
内容的提问来源于stack exchange,提问作者JimmyTheCode
相关产品推荐
相关产品推荐

