求AWS AppSync中JavaScript QUERY_ITEMS函数的实现示例
AWS AppSync 可复用查询函数实现指南
这份公开文档指南提到了一段简洁可复用代码的实现思路:
AWS AppSync函数允许您编写可在架构中多个解析器间复用的通用逻辑。例如,您可以创建一个名为QUERY_ITEMS的AWS AppSync函数,负责从Amazon DynamoDB数据源中查询数据项。对于需要查询数据项的解析器,只需将该函数添加到解析器的流水线中,并指定要使用的查询索引即可,无需重复实现逻辑。
我希望能看到该函数的具体实现,目前我对此并不清楚,这将帮助我更深入理解AppSync的使用方式。
我已实现了一个针对特定PK的查询。是不是只需要通过某种步骤来“硬编码”PK即可?
export const request = (ctx) => ({ operation: "Query", query: { expression: "pk = :pk and (begins_with(sk, :sk))", expressionValues: util.dynamodb.toMapValues({ ":pk": "DataType", ":sk": ctx.arguments.sort_path, }), }, });
通用QUERY_ITEMS函数实现
要实现可复用的查询函数,核心是把硬编码参数改成从上下文(ctx)动态获取,让不同解析器调用时能传入自定义参数:
export const request = (ctx) => ({ operation: "Query", // 可选:支持传入全局二级索引名称 index: ctx.arguments.indexName || null, query: { expression: "pk = :pk and begins_with(sk, :sk)", expressionValues: util.dynamodb.toMapValues({ ":pk": ctx.arguments.pk, ":sk": ctx.arguments.sort_path }) } }); export const response = (ctx) => { return ctx.result.items; };
使用方式
- 在AppSync控制台创建该函数,关联到你的DynamoDB数据源
- 给需要查询能力的解析器添加这个函数到流水线
- 调用时传入对应参数:
pk:目标分区键值sort_path:排序键前缀indexName(可选):全局二级索引名称
对你现有代码的优化
你当前代码把pk硬编码为"DataType",要改成通用型,只需要将:pk的值替换为ctx.arguments.pk即可。这样同一个函数就能支持不同PK的查询场景,不用重复编写解析器逻辑。
内容的提问来源于stack exchange,提问作者Dreessan
相关产品推荐
相关产品推荐

