Ошибка типа: _this._transport.sendEvent не является функцией - PullRequest
0 голосов
/ 24 декабря 2018

Я успешно подготовил устройство, я использую сертификаты X509 для подготовки и его работоспособность.Теперь я хочу отправлять сообщения устройства в центр IoT, поэтому я создал отдельный класс DeviceHelper, но я получаю эту ошибку.Может кто-нибудь помочь, пожалуйста?Ошибка типа: _this._transport.sendEvent не является функцией

Код для подготовки устройства

var fs = require('fs');
var DeviceHelper = require('./device-helper');
var Transport = require('azure-iot-provisioning-device-http').Http;
var X509Security = require('azure-iot-security-x509').X509Security;
var ProvisioningDeviceClient = require('azure-iot-provisioning- 
device').ProvisioningDeviceClient;
// Register the device.  Do not force a re-registration.
        deviceClient.register(function (err, result) {
           if (err) {
               that.setProvisionStatus(PROVISION_STATUS.ERROR);
            console.log(err);
        } else {
            console.log('registration succeeded');
            that.assignedHub = result.assignedHub;
            console.log('assigned hub=' + result.assignedHub);
            console.log('deviceId=' + result.deviceId);
            var deviceHelper = new DeviceHelper(that.deviceId, that.assignedHub, deviceCert, Transport);
            deviceHelper.sendEvent();
        }
    });

Код DeviceHelper:

   

 

var Device = require('azure-iot-device');
    var Client = Device.Client;
    var X509AuthenticationProvider = Device.X509AuthenticationProvider;
    var Message = Device.Message;
    var Http = Device.Http;

    var client = {};
    class DeviceHelper {

      constructor(deviceId, hubName, security, transport) {
        client = Client.fromAuthenticationProvider(X509AuthenticationProvider.fromX509Options(
          deviceId, hubName, security
        ),transport);
      }

      print(err, res) {
        if (err) console.log(err.toString());
        if (res) console.log(res.statusCode + ' ' + res.statusMessage);
      }

      sendEvent() {
    // Error on this line
        client.sendEvent(new Message('hello world'), this.print);
      }
    }

    module.exports = DeviceHelper;

Консольный журнал проблемы:

TypeError: _this._transport.sendEvent is not a function
index.js:23
message:"_this._transport.sendEvent is not a function"
stack:"TypeError: _this._transport.sendEvent is not a function\n at D:\Working\Brahma\web-communicator\server\iot-agent\node_modules\azure-iot-device\lib\client.js:216:30\n at retryOperation (D:\Working\Brahma\web-communicator\server\iot-agent\node_modules\azure-iot-device\node_modules\azure-iot-common\lib\retry_operation.js:31:13)\n at RetryOperation.retry (D:\Working\Brahma\web-communicator\server\iot-agent\node_modules\azure-iot-device\node_modules\azure-iot-common\lib\retry_operation.js:57:9)\n at Client.sendEvent (server\iot-agent\node_modules\azure-iot-device\lib\client.js:214:17)\n at DeviceHelper.sendEvent (\device-helper.js:22:12)\n at \iot-device.js:99:30\n at D:\Working\Brahma\web-communicator\server\iot-agent\node_modules\azure-iot-provisioning-device\lib\x509_registration.js:50:33\n at constructor._onEnter (D:\Working\Brahma\web-communicator\server\iot...
proto:Error {constructor: , name: "TypeError", message: "", …}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Транспорт, который вы отправляете конструктору deviceHelper, выглядит как , обеспечивающий транспорт.Я думаю, что вы хотите отправить устройство клиентского транспорта.Ваш фрагмент кода для модуля deviceHelper требует передачи на устройстве.Это тот вид транспорта, который имеет отправку.

0 голосов
/ 24 декабря 2018

Я предлагаю вам взглянуть на azure-iot-sdk-node / device / samples / simple_sample_device.js , он предоставляет хороший пример того, как отправить сообщение с помощью SDK .

Надеюсь, это поможет!

...