Как обрабатывать исключения в приложении-функции, имеющем ms-rest- azure с Nodejs - PullRequest
1 голос
/ 20 апреля 2020

Я создал приложение функции на портале azure, имеющее Nodejs из v12 в качестве среды выполнения.

Я могу войти в систему с именем и секретным именем службы следующим образом:

module.exports = async function (context, req) {
    context.log("Started Execution");
    msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain, function(err, credentials) {
       if (err) return console.log(err);
       var client = new someAzureServiceClient(credentials, 'subscriptionId');

       if(req.body.action ==="xyz") {
         client.someOperationGroup.method(param1, param2, function(err, result) {
           if (err) {
             context.res = {
               status: 500,
               body: "Error: " + err
             }
           }
           context.res = {
             status: 200,
             body: "action executed" + result
           }
         });
       }
       else {
         context.res = {
           status: 500,
           body: "failed"
         }
       }
     });
     context.res = {
       status: 200,
       body: "Done" // Output
     }
}

Проблема в том, что переменная контекста недоступна внутри, и я не могу обработать ответ. Вывод вышеупомянутого метода - «Готово» всегда независимо от того, что выполнение не удалось или успешно.

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете получить доступ к переменной контекста внутри другого вызова, только удалив asyn c из объявления функции и использовать context.done (), когда закончите с ответом. Ваш код будет выглядеть следующим образом.

module.exports = function (context, req) {
context.log("Started Execution");
msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain, function(err, credentials) {

   context.log("===Here you are able to access context under this call=====");

   if (err) return console.log(err);
   var client = new someAzureServiceClient(credentials, 'subscriptionId');

   if(req.body.action ==="xyz") {
     client.someOperationGroup.method(param1, param2, function(err, result) {
       if (err) {
         context.res = {
           status: 500,
           body: "Error: " + err
         }
       } else {
           context.res = {
             status: 200,
             body: "action executed" + result
           }
        }
        context.done();
     });
   } else {
     context.res = {
       status: 500,
       body: "failed"
     }
     context.done();
   }
 });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...