Я развернул действие в OpenWhisk, используя интерфейс командной строки в качестве веб-действия. Я пытаюсь вызвать его из Postman / curl. Я возвращаю ответ, который мне нужен в параметре body, как это предлагается здесь
Вот мой код:
function login(args){
const username = args.user.username;
const password = args.user.password;
const user = {
uName: 'abc',
userCn: 'Full Name',
token: 'fsgdfhj'
};
function authenticateUser(){
if(username === '' || password === ''){
return new Promise((resolve, reject) => {
reject({
headers: { 'Content-Type': 'application/json' },
statusCode: 401,
body: "Please enter username and password!"
});
});
}
else if(username==='a' && password ==='a'){
return new Promise((resolve, reject) => {
resolve({
headers: { 'Content-Type': 'application/json' },
statusCode: 200,
body : user
}) ;
});
}
}
authenticateUser()
.then(() => {
console.log('resolved and body is -> '+user);
})
.catch(()=> {
console.log('rejected -> '+stderr);
});
}
exports.main = login;
Развертывание действия как:
$ wsk -i action create /guest/package/actionName --kind nodejs:6 zipFileWithPackageJson.zip --web true
Ситуация такова, что когда я использую цикл if-else if
, не заключая его в function authenticationUser()
, я могу получить ответ. Когда я заключаю его в функцию и пытаюсь вызвать функцию, как делаю это выше, я получаю пустой ответ. Я должен заключить его в функцию, потому что мне нужно выполнить ряд операций, прежде чем я проверю имя пользователя и пароль. Я буду заключать эти операции в разные функции и вызывать их одну за другой, используя
function1()
.then(function2)
.then(function3)
.then(authenticateUser)
.catch(err => {
console.log(err)
});
Если я проверю журналы для этого действия с помощью команды $ wsk -i activation logs <activation ID>
, я увижу их, как и ожидалось. Просто тело ответа полностью пусто.
Это синтаксис в NodeJS, который я пишу неправильно, или это OpenWhisk, который напрямую ожидает блок разрешения внутри основной функции?