Как использовать 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
}
прямой комбинатор плохо документирован, но вы можете найти более подробную информацию об этом в блоге Раймонда Камдена
посмотрите ответ Раймонда здесь тоже