Как использовать openWhisk forwarder combinator для пересылки параметров вокруг действия облака

У меня есть этот сценарий, в котором я хочу проверить, использовалась ли уже электронная почта пользователя при попытке зарегистрироваться, и выдать ошибку "пользователь уже существует" в этом случае.

вот как выглядит моя последовательность:

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, и из-за этого я теряю полезную нагрузку после 2-го действия "CloudnAnt EXE QUERY-Find User with action по электронной почте"

Есть ли способ сохранить мой ввод на протяжении всей последовательности? и может ли прямой комбинатор стать решением этой проблемы?

2 ответа

Решение

Я бы попробовал /whisk.system/combinators/forwarder, который позволяет передавать аргументы действию, а затем указывать аргументы, которые отправляются следующему. Т.е. у меня есть 5 аргументов, давайте передадим 1 и 2 следующему элементу в последовательности, а когда закончим, передадим 3, 4, 5 следующему. Я полагаю, что выход из первого пункта также идет вместе.

Решение очень простое, просто замените действие cloudant на прямой комбинатор, который вызовет действие cloudant и передаст параметры вокруг него.

чтобы вызвать облачное действие, вам нужно получить полный путь к вашему действию, который включает пространство имен и имя базы данных, как показано ниже:

/namespace/dbname/actionName

в моем случае это было /sansan/users/exec-query-find

так что если вы хотите проверить, существует ли электронная почта в вашей облачной базе данных, и оставить исходные параметры, просто передайте следующую полезную нагрузку вашему облачному действию

{
    "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
}

прямой комбинатор плохо документирован, но вы можете найти более подробную информацию об этом в блоге Раймонда Камдена

посмотрите ответ Раймонда здесь тоже

Другие вопросы по тегам