Javascript 如何存储Azure函数js中的异常/错误?
我已经创建了一个Azure函数,用于将Iot Hub中的数据保存到SQL数据库中,该函数运行良好,现在我想将异常和错误保存到Azure存储表中,因此我添加了Javascript 如何存储Azure函数js中的异常/错误?,javascript,azure,azure-functions,Javascript,Azure,Azure Functions,我已经创建了一个Azure函数,用于将Iot Hub中的数据保存到SQL数据库中,该函数运行良好,现在我想将异常和错误保存到Azure存储表中,因此我添加了try{}catch(err){},但这不起作用。请纠正我。谢谢 我的职责就在这里 module.exports = function (context, iotHubMessage) { try { var strMsg = JSON.stringify(iotHubMessage); context.log('Messa
try{}catch(err){}
,但这不起作用。请纠正我。谢谢
我的职责就在这里
module.exports = function (context, iotHubMessage) {
try {
var strMsg = JSON.stringify(iotHubMessage);
context.log('Message received: ' + strMsg);
var ob1 = { "employee_idw": 444, "last_name": "Teller", "first_name": "Saara", "age": 34, "salary": 87000 };
//I misspelled 'employee_idw' to generate error
var ob2 = { "employee_id": 555, "last_name": "Teller", "first_name": "Saara", "age": 31, "salary": 87000 };
ob1.EventProcessedUtcTime = new Date;
ob2.EventProcessedUtcTime = new Date;
var arr = [];
arr.push(ob1);
arr.push(ob2);
context.bindings.outputTable = arr;
context.done();
} catch (err) {
context.log('CCC Error' + err); // even can not see this message in log
context.bindings.error= { "partitionKey": partitionKey, "rowKey": rowKey, "data": err };
}
};
看这是JSON文件
{
"bindings": [
{
"type": "eventHubTrigger",
"name": "myEventHubMessage",
"path": "myeventhub",
"consumerGroup": "$Default",
"connection": "PBCorIOTHub_events_IOTHUB",
"cardinality": "many",
"direction": "in"
},
{
"type": "apiHubTable",
"name": "outputTable",
"dataSetName": "default",
"tableName": "employees",
"connection": "sql_SQL",
"direction": "out"
},
{
"type": "table",
"name": "error",
"tableName": "dddtTest",
"connection": "cccteststr_STORAGE",
"direction": "out"
}
],
"disabled": false
}
您是否使用Azure SQL或Azure表存储来存储数据?从您的代码来看,您似乎正在使用Azure表存储。我询问的原因是,更改属性名称不会导致函数中出现错误。相反,表存储将创建一个名称拼写错误的新属性 正如Mikhail建议的那样,要存储函数内部引起的错误,您所要做的就是创建另一个输出绑定并将异常分配给它 但是,并非所有异常都发生在函数上下文中。例如,function.json配置中的错误可能会导致连接到存储的错误。这将导致函数执行在函数代码上下文之外失败。Azure功能与Application Insights直接集成,可以帮助监控您正在寻找的内容。下面是一篇博客文章,可以展示如何配置应用程序洞察
为什么拼写错误的属性会在函数内部产生错误?对于表存储,您只需要第二个输出绑定,并在
catch
块内分配它。`context.bindings.outputTable=arr`这是我的SQL表,因此我认为它会生成错误,我希望将此错误保存在Azure存储表中。为什么它会生成错误?这是一个JS变量对另一个JS变量的赋值。函数退出后,异步写入SQL。请参阅,我编辑了我的问题,它应该是错误的,因为这是SQL表,所以它不会找到“employee_idw”列。我想您仍然没有抓住要点。函数体内部不会发生与SQL的交互。SQL将在函数外部的context.done()
之后调用outputTable
不是magic DAL类,它只是JS对象中的一个属性,稍后将由运行时使用。`context.bindings.outputTable=arr`这是我的SQL表,因此我认为它将生成错误,我希望将此错误保存在Azure存储表中。