Node.js 如何处理带有ms rest azure和Nodejs的函数应用程序中的异常
我已经在azure portal中创建了一个函数应用程序,它将v12节点作为运行时环境 我可以使用服务主体名称和密码登录,如下所示:Node.js 如何处理带有ms rest azure和Nodejs的函数应用程序中的异常,node.js,azure,azure-function-app,Node.js,Azure,Azure Function App,我已经在azure portal中创建了一个函数应用程序,它将v12节点作为运行时环境 我可以使用服务主体名称和密码登录,如下所示: module.exports = async function (context, req) { context.log("Started Execution"); msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain, function(err, credenti
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
}
}
问题是上下文变量在内部不可访问,我无法处理响应。无论执行失败或成功,上述方法的输出总是“完成” 只有从函数声明中删除async并在处理响应时使用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();
}
});
}
那么,您无法捕获的潜在错误在哪里?@AvivLo在使用服务原则进行日志记录并执行一些操作后,如果出现错误,我无法捕获它,但它正在正确执行。
概念
变量仍然可以根据变量的范围在内部进行访问。只是如果(req.body.action==“xyz”)确实存在,或者有时它是未定义的,那么您的可能会出现一些问题。是req.body.action
String的数据类型。注意严格相等运算符。我传递的请求参数不是问题所在,我的代码只执行上下文变量not GettingHnx。我很快就了解了如何在此线程中导出函数