簡體   English   中英

什么算作 object 與 Typescript 中的字符串?

[英]What counts as an object vs a string in Typescript?

我正在為 Step Functions 機器創建基礎架構即代碼。 這些狀態之一是“任務”類型,它在 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 的字符串,但在 /States/Update 項目到 DynamoDB/Parameters 中是 OBJECT”

它怎么不是字符串?!

我嘗試將其寫為 [':label.$'],甚至在 JsonPath 方法的末尾寫 a.toString() function

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

      },

但似乎沒有任何效果。 我一直遇到同樣的問題,聲稱它不是字符串。

使用 JSON.stringify() 之類的東西也不起作用,因為 expressionAttributeValues 獲取一個鍵並將其與 DynamoAttributeValue 匹配。

TL;DR在表達式屬性值定義中刪除':label.$': DynamoAttributeValue(...)中的.$后綴。 鍵應該只是':label'


正如@TobiasS 在評論中所說,問題出在您的 State 機器任務語法上。 :label.$上的.$后綴告訴 AWS 需要一個表示值路徑的 JSONPath 字符串。 但字符串無效 State 此字段的機器語法。 需要鍵值對。 CDK 文檔有一個語法正確的示例

❌ 你的 CDK 代碼綜合成什么:

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

✅ AWS 期望合成的 State 機器定義為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM