Невозможно передать объект JSON между nodeJS (модуль bleno) и приложением corodova (плагин ng-cordova-bluetoothle) - PullRequest
0 голосов
/ 15 февраля 2019

Я создаю приложение cordova , используя angularJS и плагин ng-cordova-bluetoothle для центральной стороны при использовании nodeJS с bleno для периферийной стороны малинового Pi.

На периферийной стороне я построил characteristic с доступным только свойством read и выглядит так:

   // GET TEMP CHARACTERISTIC
   new bleno.Characteristic({
       value:null,
       uuid: settings.get_temp_characteristic_id,
       properties: ['read'],
       onReadRequest: function(offset, callback){
           getTemp()
       .then( (res) => {
           var buffer = Buffer.from( JSON.stringify(res) );
           callback(this.RESULT_SUCCESS, buffer);
       })
       }
   })

function getTemp(){
    return axios.get('http://127.0.0.1:8000/get_temp')
    .then( (res) => {
        console.error(res.data);
        return res.data;
    })
    .catch( (error) => {
        console.error(error);
        return error;
    })
}

Теперь в центральной части у меня есть функция, которая создает запрос на чтение к периферийному устройству следующим образом:

    function getTemp(){
        return bleReadgetTemp()
        .then (function(response){
                var bytes = bluetoothle.encodedStringToBytes(response.value);
                var string = bluetoothle.bytesToString(bytes);
                var response = JSON.parse(string);

                 //response = JSON.parse(atob(response.value));
                 Log.add("[+] getTemp: " + JSON.stringify(response) );
                 var tempTimePoint = { time: Date.now() / 1000, y: response.temp };
                 // Push the temp value into rootScope vars.
                 $rootScope.experiment.actualTemp = [];
                 $rootScope.experiment.actualTemp.push( tempTimePoint );
                 $rootScope.experiment.historyTemp[0].values.push( tempTimePoint );

                 Log.add("[+] TempBuffer: " + $rootScope.experiment.actualTemp[0] );
                 return response;
        })
        .catch( function(error){
            Log.add('[!] getTemp Error' + JSON.stringify(error));
        })
    } 

Так вот в чем проблема.В случае, когда сторона nodeJS отправляет объект, такой как {"temp": 2455555555}, все работает отлично и как положено.Но если цифры возвращаемой температуры больше 10 или вообще, объект становится больше, что-то вроде {"temp":232, "status": "OK"}, тогда вся вселенная падает, и я получаю (в центральной части) ошибку

[!] Ошибка getTemp {}

УВЕДОМЛЕНИЕ:

Еще одна вещь, которую я заметил, этоследующие.В центральной части я вызываю функцию getTemp() внутри интервального вызова, например $interval( function(){ getTemp(); }, 5000).Таким образом, пока объект JSON находится в своей небольшой версии, этот интервал запускает функцию каждые 5 секунд.Если объект JSON становится больше, то интервал вызывает функцию непрерывно.

Итак, что происходит?Есть ли проблема переполнения?Я неправильно преобразовываю данные JSON?

Любая идея или намек действительно приветствуются.

...