2017-07-26 10 views
0

IotハブからSQLデータベースにデータを保存するためにAzure関数を作成しました。これで、例外とエラーをAzureストレージテーブルに保存したいので、try{ } catch(err){}を追加しましたが、それは機能しません。私を修正してください。ありがとう!Azure関数jsからException/Errorを格納する方法は?

私の機能がここ

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 }; 
} 
}; 

であるが、これは

{ 
"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 
} 
+0

なぜスペルミスのプロパティが関数内でエラーを生成するのですか?テーブルストレージの場合、2番目の出力バインディングが必要です。これを 'catch'ブロックの中に割り当てます。 – Mikhail

+0

'context.bindings.outputTable = arr'これは私のSQLテーブルですので、エラーが発生し、このエラーをAzureストレージテーブルに保存することはできません。 –

+0

なぜエラーが発生しますか? 1つのJS varを別のものに割り当てることです。 SQLへの書き込みは、関数が終了した後で非同期に発生します。 – Mikhail

答えて

0

JSONファイルであることがわかりますが、データを格納するためのAzure SQLまたはAzureのテーブルストレージを使用していますか?あなたのコードからAzureテーブルストレージを使用しているようです。私が尋ねる理由は、変更されたプロパティ名が関数にエラーを引き起こさないからです。代わりに、テーブル記憶域は、スペルの間違った名前の新しいプロパティを作成します。

Mikhailは、関数の内部で発生したエラーを格納するように提案されているように、別の出力バインディングを作成し、それに例外を割り当てるだけで済みます。

ただし、すべての例外が関数コンテキスト内で発生するわけではありません。たとえば、function.jsonの設定でエラーが発生すると、ストレージに接続する際にエラーが発生する可能性があります。これにより、関数の実行が関数コードのコンテキスト外で失敗することになります。 Azureの機能は、Application Insightとの直接の統合を提供し、あなたが探しているものを監視するのに役立ちます。ここに、Application Insightsを設定する方法を示すブログ記事があります。

https://blogs.msdn.microsoft.com/appserviceteam/2017/04/06/azure-functions-application-insights/

+0

'context.bindings.outputTable = arr'これは私のSQLテーブルですので、エラーが発生してAzureストレージテーブルにこのエラーを保存することはできません。 –

関連する問題