首页 > 解决方案 > 如何从 http.call (get) 中收到的令牌在 Google Workflows 中进行比较

问题描述

我有一个简单的 Cloud Function 响应:

{"pasValidate":true} 或者 {"pasValidate":false}

我需要 Cloud Workflows 正确比较真假 采取正确的路线。我试过引号,没有引号,文档中唯一的部分是必须通过响应的“正文”部分引用变量然后使用它(真的,文档中没有其他内容)所以这就是我所做的:

- getData:
        call: http.get
        args:
            url: https://us-central1-ACCOUNT.cloudfunctions.net/Cloud_Function
        result: jsonResponse
  - evaluateRes:
        switch:
         - condition: $(jsonResponse.body.pasValidate == "true")
           next: logStep1
         - condition: $(jsonResponse.body.pasValidate == "false")
           assign:
            - failLvl: "step1"
           next: endFail

在这一切之后,我得到了以下失败运行响应:

in step "evaluateRes": {"message":"TypeError: in conditional predicate: expected boolean, got str","tags":["TypeError"]}

我知道它得到的是一个字符串而不是所需的 True/False,但是在这一点上,我敢于问社区我缺少什么。也许有一些更简单的东西我没有抓住。

资料来源:

标签: google-cloud-platformyamlgoogle-workflows

解决方案


首先,确保你的函数的响应是 application/json。您可以通过将响应标头设置为application/json. 例如:

res.setHeader("Content-Type", "application/json");

如果不这样做,您可能会遇到解析问题,如前所述:

application/json类型的响应存储在变量中时,JSON 响应将转换为您作为响应主体访问的字典。Workflows 包含一个用于访问此数据的内置解析器。

接下来,在使用块时使用花括号{}而不是括号。删除布尔值上的双引号。()switch

switch:
    - condition: ${jsonResponse.body.pasValidate == true}
      next: logStep1
    - condition: ${jsonResponse.body.pasValidate == false}
      assign:
      - failLvl: "step1"
      next: endFail

推荐阅读