Uncaught TypeError: Невозможно прочитать свойство 'open' из неопределенного - PullRequest
0 голосов
/ 11 мая 2018

Я создал функцию Sensors и создал в ней объект serialport. Я также создал прототип находки, который в теории должен иметь доступ к объекту порта для открытия, записи и привязки.

Я получаю сообщение об ошибке:

Uncaught TypeError: Невозможно прочитать свойство 'open' из неопределенного

Я не уверен, почему ....

Код:

  <script>
    var sp = require('serialport');
    var comports = [];

    //Object to connect to a specific comport and send the 'i' command
    function Sensors(com) {
      this.find();
      this.address = com;
      this.port = new sp(com, {
        baudrate: 9600,
        autoOpen: false
      });
    }
    Sensors.prototype.find = function() {
      console.log("ran");
      this.port.open(function(err) {
        if (err) {
          return console.log('Error opening port: ', err.message);
        }

        this.port.write('i' + String.fromCharCode(13), function(err) {
          if (err) {
            return console.log('Error on write: ', err.message);
          }
          console.log('message written');
        });

        this.port.on('data', function(data) {
          var sensorData = data;
          var splitString = sensorData.toString().split(',');
          console.log(splitString[1]);
          if (sensorData.length > 0) {
            if (splitString[1] == 'pH' || splitString[1] == 'EC' || splitString[1] == 'RTD') {
              console.log(splitString[1]);
            }
            this.port.close(function(err) {
              console.log('port closed', err);
            });
          }
        });
      });
    };

    function findSensors() {
      sp.list(function(err, ports) {
        for (i = 0; i < ports.length; i++) {
          var sensor = new Sensors(ports[i].comName);
          sensor.find();
        }

      });
    }
    //startup function to find comports and find the sensor(s)
    function startUp() {
      findSensors();
    }
  </script>

1 Ответ

0 голосов
/ 11 мая 2018

В конструкторе вы вызываете this.find(); перед тем, как назначить this.port, поэтому строка this.port.open внутри find приводит к ошибке. Измените его так, чтобы this.find запускал после того, как заполнено свойство port.

function Sensors(com) {
  this.address = com;
  this.port = new sp(com, {
    baudrate: 9600,
    autoOpen: false
  });
  this.find();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...