我有这个带有类型的 appsync GraphQL 架构
type Place {
id: ID!
name: String!
nameTranslations: FieldTranslations
}
然后我有这种类型和分页类型的解析器,效果很好。现在我想为“名称”字段添加一个字段解析器,它将根据查询参数自动翻译名称..
这是 Javascript appsync 解析器
export function request(context) {
const source = context.source;
const lang = context.arguments.lang || "en";
const translations = source.nameTranslations || {};
let translatedName = source.name;
if (translations[lang]) {
translatedName = translations[lang];
}
return {
payload: {
translatedName,
},
};
}
export function response(context) {
return context.result.translatedName;
}
正确翻译名称并应返回更改后的名称。对于这种情况,我使用 NONE 数据源。
以下是创建解析器的地形
resource "aws_appsync_resolver" "translatePlace" {
api_id = var.app-sync-id
field = "name"
type = "Place"
request_template = "{}"
response_template = "$context.result"
kind = "PIPELINE"
pipeline_config {
functions = [
module.translatePlace.appsync-function.function_id
]
}
depends_on = [module.translatePlace]
}
基本上它只是添加
request_template = "{}"
和 response_template = "$context.result"
但是这样,我无法实际解析字段值..只是不断收到错误
{
"data": null,
"errors": [
{
"path": [
"places",
"places",
0,
"name"
],
"data": null,
"errorType": "MappingTemplate",
"errorInfo": null,
"locations": [
{
"line": 15,
"column": 7,
"sourceName": null
}
],
"message": "Unable to convert 123Another City to Object."
},....
映射后函数响应和解析器的正确映射是什么?我想我几乎完成了一切,但不断出错。
您正在使用 VTL
request_template
和 response_template
变量。
由于您使用 JS 作为解析器,因此请使用
code
变量。
在此处查看
Example JS
部分:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appsync_resolver#example-usage-js
你正在使用