javascript - 使用VelocityJS解析VTL时如何修复 "Unexpected token $ in JSON"

标签 javascript aws-appsync vtl

为了为我的 AppSync 解析器编写单元测试,我使用 VelocityJS 包来解析 sam 模板内的 VTL。但是,VTL 模板尚未完全解析。

代码在 AWS 上运行良好,错误的是单元测试。 https://github.com/shepherdwind/velocity.js

#if($util.isNullOrBlank($ctx.result.themePreferences))
    #set($themePreverences = {})
    $util.qr($themePreverences.put("darkMode", "DEFAULT"))
    $util.qr($ctx.result.put("themePreferences", $themePreverences))
#end
$util.toJson($ctx.result)

当使用 let result = Velocity.parse(template, ctx); 时,结果是字符串 "$util.toJson($ctx.result)" 而不是$ctx.result 的 JSON 值。

IE:

{ "themePreferences": { "darkMode": "DEFAULT" } }

最佳答案

我认为解析问题的原因是 util 和 ctx/context 都是 AppSync 概念,而不是 VTL 概念。由于您使用的是第三方库,他们不知道这意味着什么,也无法替换它们。

您可能会发现 Amplify 的新模拟和测试工具很有帮助:https://aws-amplify.github.io/docs/cli-toolchain/quickstart?sdk=js#mocking-and-testing

如果上述内容不适合您的用例,还有其他第三方库可以很好地涵盖 AppSync 本地开发,值得一试。

关于javascript - 使用VelocityJS解析VTL时如何修复 "Unexpected token $ in JSON",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465843/

相关文章:

amazon-web-services - AWS AppSync 解析器内部超时配置

amazon-web-services - 在 Apache Velocity 模板语言中追加字符串变量

java - 访问对象内部的字段时,Velocity 模板不会去模板化

javascript - Bootstrap Dropdown JavaScript 不适用于多个下拉菜单

javascript - 适合包含两个图像的框

javascript - 隐藏第一个元素然后延迟显示另一个元素 - Jquery

node.js - 尝试查询 dynamodb 时,Lambda 函数返回 401 错误

php - 如何将javascript中的组合框(EXTJS)中的参数传递到php文件?

amazon-web-services - 使用 ElasticSearch 的 AWS DynamoDB 地理空间查询

java - 在 Velocity 模板中传递 Java 函数