在Typescript中什么算对象和字符串?

0vvn1miw  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(116)

我正在为阶跃函数计算机创建基础结构即代码。其中一个状态的类型为“任务”,它在DynamoDB表上执行DynamoUpdateItem。
代码如下所示:

const updateDDB = new tasks.DynamoUpdateItem(this, 'Update item into DynamoDB', {
      key: { ['Task'] : tasks.DynamoAttributeValue.fromString('Processing') },
      table: table,
      updateExpression: 'SET LastRun = :label',
      expressionAttributeValues: {
        ':label.$': DynamoAttributeValue.fromString(JsonPath.stringAt('$$.Execution.StartTime')), 
      },
      resultPath: JsonPath.DISCARD,
    });

但是,我一直收到一个错误消息,说模式验证失败,
“字段”:label.$“的值必须是包含JSONPath的字符串,但该字符串是DynamoDB/Parameters中的/States/Update项处的对象”
怎么可能不是字符串!
我尝试过将其编写为[':label.$'],甚至在JsonPath方法的末尾编写.toString()函数

expressionAttributeValues: {
        ':label.$': (DynamoAttributeValue.fromString(JsonPath.stringAt('$$.Execution.StartTime').toString())), 

      },

但似乎没有什么工作。我一直得到同样的问题,声称它不是一个字符串。
使用JSON.stringify()也不起作用,因为expressionAttributeValues接受一个键,并将其与DynamoAttributeValue匹配。

wgx48brx

wgx48brx1#

TL;DR删除表达式属性值定义中':label.$': DynamoAttributeValue(...)的后缀.$。键应该简单地为':label'

正如@TobiasS在评论中所说,问题出在状态机任务语法上。:label.$上的.$后缀告诉AWS需要一个表示值路径的JSONPath字符串。但是字符串不是该字段的有效状态机语法。需要一个键值对。CDK文档中有一个语法正确的示例。
您的CDK代码合成为:

{
    "ExpressionAttributeValues": {
      ":label.$": { "S.$": "$$.Execution.StartTime" }
    },
}

AWS期望合成状态机定义为:

{
    "ExpressionAttributeValues": {
      ":label": { "S.$": "$$.Execution.StartTime" }
    },
}

相关问题