首页 > 解决方案 > 将 API 网关中的速度模板转换为使用 AWS CDK 在 typescript 中传递

问题描述

我正在使用带有 AWS CDK 的 typescript 为 api 网关生成 cloudFormation 模板。我有一个 Apache Velocity 模板,可以帮助我转换我的响应。当我使用打字稿创建 API 网关时。如何从代码本身传递模板。我需要在需要字符串的 IntegrationOptions 接口中的 responseTemplates 中传递我的模板。我一直无法找到任何合理的方法将其转换为字符串。

{
    "sellableQuantity": $inputRoot.quantity),
    "reservedQuantity": $inputRoot.reservedQuantity)
    "marketplaceInventories": [
        #foreach( $marketplaceInventory in $inputRoot.marketplaceInventories) )
            {
                "sellableQuantity": $marketplaceInventory.sellableQuantity,
                "marketplaceAttributes": {
                    #set( $marketplaceAttributes = $marketplaceInventory.marketplaceAttributes )
                    "marketplaceName": "$marketplaceAttributes.marketplaceName",
                    "channelName": "$marketplaceAttributes.channelName"
                }
            }
            #if( $foreach.hasNext ) , #end
        #end
    ] 
}

标签: typescriptamazon-web-servicesaws-api-gatewayaws-cdkvelocity-template-language

解决方案


你的问题真的是“我如何定义一个长字符串而不用担心在 javascript 中转义特殊字符?”

我认为javascript 模板文字是最好的选择,因为它可以让您不必担心转义或行继续。在您的字符串周围使用反引号,String.raw您可以确保您定义的内容将逐字传递:

let myVelocityTemplate = String.raw`{
    "sellableQuantity": $inputRoot.quantity),
    "reservedQuantity": $inputRoot.reservedQuantity)
    "marketplaceInventories": [
        #foreach( $marketplaceInventory in $inputRoot.marketplaceInventories) )
            {
                "sellableQuantity": $marketplaceInventory.sellableQuantity,
                "marketplaceAttributes": {
                    #set( $marketplaceAttributes = $marketplaceInventory.marketplaceAttributes )
                    "marketplaceName": "$marketplaceAttributes.marketplaceName",
                    "channelName": "$marketplaceAttributes.channelName"
                }
            }
            #if( $foreach.hasNext ) , #end
        #end
    ] 
}`

推荐阅读