Javascript 如何存储Azure函数js中的异常/错误?

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

我已经创建了一个Azure函数,用于将Iot Hub中的数据保存到SQL数据库中,该函数运行良好,现在我想将异常和错误保存到Azure存储表中,因此我添加了
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存储表中。