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

首次使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:50:26