首次使用AWS AppSync JS解析器遇Unable to convert错误求助
问题:使用AWS AppSync JavaScript解析器时出现“Unable to convert”错误
首次尝试使用AWS AppSync JavaScript解析器时触发“Unable to convert”错误,以下是相关代码与配置:
请求模板代码(Query-listItems-request.js)
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { args: { userId } } = ctx; return { operation: 'Query', query: { expression: '#id = :id', expressionValues: util.dynamodb.toMapValues({ ':id': `${userId}` }), expressionNames: { '#id': 'id' }, }, }; } export function response(ctx) { return ctx.result; }
AWS SAM模板配置
AppGraphqlApiQueryListBalanceLogsResolver: Type: AWS::AppSync::Resolver Properties: TypeName: Query DataSourceName: !GetAtt AppGraphqlApiToListItemDataSource.Name RequestMappingTemplateS3Location: Query-listItems-request.js ResponseMappingTemplateS3Location: AppGraphqlApi/response.vtl ApiId: !Ref AppGraphqlApi FieldName: listItems DependsOn: AppGraphqlBOApiSchema
排查思路与解决方案
1. 补充JavaScript解析器运行时配置(核心修复)
AWS AppSync的JavaScript解析器必须在SAM模板中明确指定Runtime,否则会默认以VTL解析器的逻辑处理JS文件,直接触发类型转换错误。
修改SAM模板的Resolver配置,添加Runtime属性:
AppGraphqlApiQueryListBalanceLogsResolver: Type: AWS::AppSync::Resolver Properties: TypeName: Query DataSourceName: !GetAtt AppGraphqlApiToListItemDataSource.Name RequestMappingTemplateS3Location: Query-listItems-request.js ResponseMappingTemplateS3Location: AppGraphqlApi/response.vtl ApiId: !Ref AppGraphqlApi FieldName: listItems # 新增JavaScript运行时配置 Runtime: Name: APPSYNC_JS RuntimeVersion: 1.0.0 DependsOn: AppGraphqlBOApiSchema
2. 对齐DynamoDB字段类型
“Unable to convert”错误常因请求值与表中字段类型不匹配导致:
- 若表中
id为字符串类型:直接传入userId即可,无需用模板字符串${userId}转换(冗余操作可能引发隐式类型问题) - 若表中
id为数字类型:确保userId是数值类型,避免转成字符串
修正后的请求模板示例:
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { args: { userId } } = ctx; return { operation: 'Query', query: { expression: '#id = :id', expressionValues: util.dynamodb.toMapValues({ ':id': userId }), expressionNames: { '#id': 'id' }, }, }; } export function response(ctx) { return ctx.result; }
3. 验证数据源配置
确认AppGraphqlApiToListItemDataSource是DynamoDB类型的数据源,且关联表中存在id字段,字段类型与查询条件中的值类型完全一致。
内容的提问来源于stack exchange,提问作者moh.s
相关产品推荐
相关产品推荐

