NodeJS调用AppSync执行createApiKey突变报错FieldUndefined
错误含义与问题排查
错误含义
FieldUndefined: Field 'createApiKey' in type 'Mutation' is undefined 意思是:服务端的GraphQL Schema里,Mutation类型下找不到createApiKey这个字段。但你在AppSync控制台能正常跑这个突变,说明服务端Schema本身没问题,问题出在客户端请求的配置或上下文上。
可能的问题与解决办法
1. 客户端连错了AppSync API端点
检查NodeJS客户端的配置,确认用的API端点、认证信息(比如API Key)和控制台是同一个。要是客户端连的是另一个没定义createApiKey突变的API,肯定会报这个错。
2. 客户端认证权限不够
AppSync控制台默认用你的AWS账号权限(一般是管理员级),但NodeJS客户端用的IAM角色、API Key或者Cognito用户,可能没被允许执行createApiKey突变:
- 去AppSync控制台的Schema标签下看Resolver配置,确认对应认证类型的角色有访问
createApiKey的权限。 - 要是用API Key,检查Key有没有过期,关联的权限策略是不是允许执行这个突变。
3. 突变字符串的语法小问题
你写的突变定义里,变量行末尾多了个逗号:
mutation createApiKey( $key: String!, // 这里的逗号多余 ){ ... }
虽然多数解析器能兼容,但建议删掉这个逗号,避免潜在的解析问题:
mutation createApiKey( $key: String! ){ createApiKey( input: { key: $key } ){ key } }
4. 客户端缓存了旧Schema(用Apollo Client的话)
如果你的Apollo Client开了本地Schema校验,可能缓存了没包含createApiKey的旧Schema,导致客户端提前报错。可以试试清掉客户端缓存,或者临时禁用本地Schema校验测试。
验证步骤
- 在NodeJS里打印客户端配置的端点,和控制台的端点对比,确保一致。
- 用客户端用的认证信息(比如API Key)在控制台的Queries标签下重新跑突变,模拟客户端的权限环境,看能不能成功。
- 删掉突变字符串里的多余逗号,再测试一次。
内容的提问来源于stack exchange,提问作者JimmyTheCode
相关产品推荐
相关产品推荐

