ArgumentError('对象 \'deviceInfo' 缺少属性:deviceId');我该如何解决这个问题?
Posted
技术标签:
【中文标题】ArgumentError(\'对象 \\\'deviceInfo\' 缺少属性:deviceId\');我该如何解决这个问题?【英文标题】:ArgumentError('The object \'deviceInfo' is missing the property: deviceId'); How do I solve this?ArgumentError('对象 \'deviceInfo' 缺少属性:deviceId');我该如何解决这个问题? 【发布时间】:2021-10-13 02:35:58 【问题描述】:我正在使用 Azure IoT Hub 并尝试检索连接到我们工作场所 Hub 的真实设备(非模拟)。该项目是我们正在创建一个公司仪表板来显示和编辑来自我们的 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 中的两个页面,并且与我的具体问题都不相似)..
【问题讨论】:
【参考方案1】:如果你看到source code of IOT hub SDKs,你会发现如果第一个参数不包含deviceId属性,create方法会抛出ArgumentError
:
因此,您的 deviceId
属性未填充。 create(DeviceDescription, HttpResponseCallback) 在 IoT 中心创建新的设备标识。您必须为其提供价值。 Registry 不提供您在代码中使用的那些属性。请参阅this 示例以正确使用registry.create
。而且,我建议您阅读Understand the identity registry in your IoT hub。
如果您还有其他问题,请告诉我。
【讨论】:
你能再解释一下吗?我将如何“填充”它? 对你有帮助吗? 嗨,是的,它主要有帮助。我能够将所有设备 ID 记录到控制台中,但现在发送给 Postman 有点麻烦。我不断收到错误“在将标头发送到客户端后无法设置标头”。我的更新代码和控制台日志的屏幕截图在这里:imgur.com/a/sprvtLy 无论如何我可以给你“接受的答案”,但我真的很想跟进,因为我知道它现在非常接近。正如您在 SQL 查询的最后一行和“_http_outgoing...”之前看到的那样,在错误之前的控制台中显示了两个设备。邮递员展示了一个。 控制台在我输入“res.send”之前记录了所有设备(当然是在 Postman 中显示),但之后,我收到了我之前评论中提到的错误。 请检查您是否在向客户端发送请求后设置标头。以上是关于ArgumentError('对象 \'deviceInfo' 缺少属性:deviceId');我该如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
Rails - 使用ActiveRecord :: Enum时的ArgumentError
`exec':字符串包含空字节(ArgumentError)
UTF-8 中的无效字节序列 (ArgumentError)