如何使用 openWhisk 转发器组合器围绕 cloudant 操作转发参数

How to use openWhisk forwarder combinator to forward parameters around a cloudant action

我有这种情况,我想在尝试注册时检查用户的电子邮件是否已被使用,并在这种情况下抛出错误“用户已存在”。

这是我的序列的样子:

Input action -> CloudnAnt EXE QUERY-Find -> Validate email action -> CloudnAnt create User/Throw user already exists error action

我的 json 有效负载如下所示: {email: 'blahblah@domain.com', pass: "pass"}

问题是我无法控制 cloudnant 预定义操作的输出,因此我在第二次操作后丢失了负载 "CloudnAnt EXE QUERY-Find User with email action"

有没有办法在整个序列中保持我的输入?正向组合器可以解决这个问题吗?

我会尝试 /whisk.system/combinators/forwarder,它允许您将参数传递给一个动作,然后指定发送到 下一个 动作的参数。即,我有 5 个参数,让我们将 1 和 2 传递给序列中的下一项,完成后,将 3、4、5 传递给下一项。我相信第一项的输出也是如此。

解决方案非常简单,只需将 cloudant 操作替换为前向组合器,它将调用 cloudant 操作并转发其周围的参数。

要调用 cloudant 操作,您需要获取操作的完整路径,其中包括命名空间和数据库名称,如下所示:

/namespace/dbname/actionName

在我的例子中是 /sansan/users/exec-query-find

因此,如果您想检查电子邮件是否存在于您的 cloudant 数据库中,并保留原始参数,只需将以下有效负载传递给您的 cloudant 操作

{
    "data":{...},// some data you want to keep after the cloudant query
    "query": {
      "selector": {
        "email": "email@domain.com"
      }
    },
    "$actionName": "/sansan/users/exec-query-find",
    "$forward": [// list of params you want forward
        "data"
    ],
    "$actionArgs": [ // list of params you want to feed the action
       "query"
    ]
}

在 运行 序列之后,输出应如下所示:

{
    "data": {...}, // your data
    "docs": [...]// cloudant query results
}

前向组合器的文档很少,但您可以在 Raymond Camden's blog post

中找到更多详细信息

也看看Raymond的回答