Appsync“批量创建”解析器给出“映射模板”错误

Posted

技术标签:

【中文标题】Appsync“批量创建”解析器给出“映射模板”错误【英文标题】:Appsync 'Batch Create' Resolver gives "mapping template" error 【发布时间】:2019-09-01 16:43:48 【问题描述】:

我正在尝试为我创建的 BatchCreateIngredients 突变创建解析器,但是当我运行该突变时,我收到 MappingTemplate 类型的错误,我不知道为什么。

我的表名称是 IngredientsTable,我没有使用任何认知验证。

突变:

mutation batchCreateIngredient 
  batchCreateIngredients(
    input: [
    name: "Cookie" vegan: VEGAN glutenfree: GLUTENFREE,
    name: "Pizza", vegan: VEGAN, glutenfree: GLUTENFREE,
]) 
    items
      id
      name
      vegan
    
  

错误信息:


  "data": 
    "batchCreateIngredients": null
  ,
  "errors": [
    
      "path": [
        "batchCreateIngredients"
      ],
      "data": null,
      "errorType": "MappingTemplate",
      "errorInfo": null,
      "locations": [
        
          "line": 6,
          "column": 3,
          "sourceName": null
        
      ],
      "message": "Item list elements can't be null for table 'IngredientTable' at path '$[tables]'"
    
  ]

我的架构的相关部分:

input CreateIngredientInput 
    name: String!
    vegan: Vegan!
    glutenfree: GlutenFree!
    popularity: Int


enum GlutenFree 
    GLUTENFREE
    CONTAINS_GLUTEN
    UNKNOWN


type Ingredient 
    name: String!
    id: ID!
    vegan: Vegan
    glutenfree: GlutenFree
    popularity: Int


type IngredientConnection 
    items: [Ingredient]
    nextToken: String


type Mutation 
    createIngredient(input: CreateIngredientInput!): Ingredient
    batchCreateIngredients(input: [CreateIngredientInput]): IngredientConnection
    updateIngredient(input: UpdateIngredientInput!): Ingredient
    deleteIngredient(input: DeleteIngredientInput!): Ingredient


enum Vegan 
    VEGAN
    NON_VEGAN
    UNKNOWN

BatchCreateIngredients 的解析器:

#set($ingdata = [])
#foreach($ing in $ctx.args.input)
    $util.qr($ingdata.add($util.dynamodb.toMapValues($item)))
#end


    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : 
        "IngredientTable": $utils.toJson($ingdata)
    

【问题讨论】:

你提到你的表名是IngredientsTable,但是你的映射模板有IngredientTable...错别字? 【参考方案1】:

你也过去了

name: "Cookie" 素食主义者: VEGAN glutenfree: GLUTENFREE

但映射

项目 ID 姓名 素食主义者

glutenfree 缺失,解析器未处理 id

【讨论】:

【参考方案2】:

据我所知,问题似乎出在请求映射模板中。您调用了循环变量 $ing,但您将“$item”传递给 toMapValues 函数。可以试试把“item”改成“ing”吗?

【讨论】:

以上是关于Appsync“批量创建”解析器给出“映射模板”错误的主要内容,如果未能解决你的问题,请参考以下文章

我可以在Aws AppSync解析器映射模板中对用户输入进行消毒吗?

使用 API 密钥在 AWS AppSync 中测试解析程序?

未找到字段的值 - AppSync AWS

如何在 AWS appSync 的 Apache Velocity 请求映射模板中操作字符串和数组

AppSync 查询解析器:是不是需要 expressionNames 和 expressionValues?

AppSync Dynamodb 解析器