ArgumentError('对象 \'deviceInfo' 缺少 属性: deviceId');我该如何解决这个问题?

ArgumentError('The object \'deviceInfo' is missing the property: deviceId'); How do I solve this?

我正在使用 Azure IoT 中心并尝试检索连接到我们工作场所中心的真实设备(非模拟)。该项目是我们正在创建一个公司仪表板来显示和编辑来自我们的 IoT 中心的设备的各个方面。我是一名实习生,所以这确实是我第一次使用 IoT Hub 做任何事情,所以请原谅我的天真。我正在测试只是为了在“registry.create”函数中发送有关设备的基本信息,但我不断收到上述错误。此外,我们的数据库是 Azure SQL.

这是我的代码部分。仅发布必要的代码:

var iothub = require('azure-iothub');
var connectionString = '<Our connection string here>';
var registry = iothub.Registry.fromConnectionString(connectionString);

...

const device = {
    deviceId: registry.deviceId,
    devStatus: registry.status,
    connStatus: registry.connectionState
}

registry.create(device, function(err, deviceInfo, res) {
    if (err) {
        registry.get(device.deviceId, printDeviceInfo);
        console.log(device.deviceId);
    }
    if (deviceInfo.deviceId) {
        printDeviceInfo(err, deviceInfo.deviceId, res)
    }
});

function printDeviceInfo(err, deviceInfo, res) {
    if (deviceInfo) {
        console.log('Device ID: ' + deviceInfo.deviceId);
        console.log('Connection state: ' + deviceInfo.connStatus)
    }
}

这是设备的数据库模型:

module.exports = (sequelize, Sequelize) => {
    const Device = sequelize.define('devices', {
        deviceId: {
            type: Sequelize.STRING,
            required: true
        },
        devStatus: {
            type: Sequelize.BOOLEAN,
            allowNull: false,
            defaultValue: true
        },
    });
    return Device;
}

不确定可以提供多少帮助,但我们将不胜感激。网上关于此错误的信息不多(Google 中有两页,但都与我的具体问题不相似)..

如果您看到 source code of IOT hub SDKs,您会发现 如果第一个参数不包含 deviceId 属性[=,则创建方法将抛出 ArgumentError 25=]:

因此,您的 deviceId 属性 未填充。 create(DeviceDescription, HttpResponseCallback) creates a new device identity on an IoT hub. You will have to provide a value to it. Registry does not provide those properties you have used in your code. Refer this sample for proper usage of registry.create. And, I would recommend you to read Understand the identity registry in your IoT hub.

如果您还有其他问题,请告诉我。