我试图从Event Hub (在IoTHub的背面)读取设备Id,但我在JS中的语法似乎是错误的。
module.exports = function (context, IoTHubMessages) {
context.log(`JavaScript eventhub trigger function called for message array: ${IoTHubMessages}`);
var deviceId = IoTHubMessages.SystemProperties["iothub-connection-device-id"];此函数返回错误: Exception: TypeError: Cannot read property 'iothub-connection-device-id‘of undefined
我不能完全确定"iothub-connection-device-id“是否是Event Hub上属性的正确名称,但问题似乎出在SystemProperties上。
感谢任何人的帮助。
发布于 2020-07-21 13:48:56
iothub-connection-device-id是正确的密钥,你只需要在正确的属性包上使用它即可。一个不相关的GitHub问题https://github.com/Azure/azure-sdk-for-js/issues/7801显示了此密钥如何在每条消息上确实可用。
根据functions.json文件中的基数,IotHubMessages可以是一组消息,也可以是一条消息。有关更多详细信息,请参阅IOTHubMessage.forEach is not a function?。
如果它是一个消息数组,则直接在其上访问SystemProperties将不起作用。您需要遍历以分别访问每条消息。
您在每条消息上看到systemProperties了吗?如果是,则message.systemProperties["iothub-connection-device-id"]应该可以工作。
发布于 2020-02-21 03:11:10
您应该以这种方式阅读消息。有关主题的更多信息,请阅读本文- https://docs.microsoft.com/en-us/samples/azure-samples/functions-js-iot-hub-processing/processing-data-from-iot-hub-with-azure-functions/
IoTHubMessages.forEach(message => {
context.log(`Processed message: ${message}`);
count++;
totalTemperature += message.temperature;
totalHumidity += message.humidity;
deviceId = message.deviceId;
});发布于 2020-02-21 00:25:02
首先,使用JSON.stringify将收到的有效负载打印出来。其次,我认为您应该能够通过执行以下操作来访问您的设备id : message.annotations"iothub-connection-device-id".有关更多信息,请参考微软的Github repos中提供的快速入门示例。导航到iot-hub\Quickstarts\read-d2c-messages文件夹,您应该可以找到处理消息有效负载和打印输出的示例。
https://stackoverflow.com/questions/60320652
复制相似问题