2017-07-18 5 views
0

Ich versuche, einen var -Wert in einer anderen Datei zu verwenden, und wenn ich es am Anfang meines Codes definiere, löst es den Fehler aus "Kann Eigenschaft 'stats' von null nicht lesen" so versuche ich benutze globals aber das hilft nicht, bekomme immer null in meiner anderen Datei.Wert wird undefiniert zwischen Controllern nodejs

Ich brauche listaLive, listaRepeated und listaPasserBy Werte in anderen Datei, wo ich diese Daten senden, um sie zu verarbeiten und dann in db (AgregateController) einfügen.

Zu der Zeit ist mein Code:

ProbingController.prototype.pollingAllDevices = function() { 
    createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'probing', 'inicio'); 
    var numDevices = 1; 
    return Database.Devices.getDevices().then(function (devices) { 
     return new Promise(function (resolve, reject) { 
      async.each(devices, function (device, callback) { 
       logger.info('WSController-Service', 'probing', 'getRadioInfo --> ', device.id, ' :: ', numDevices++, '/', devices.length); 
       //stats ubus call wsniffer stats pie chart 
       //list ubus call wsniffer list 
       //listex ubus call wsniffer listex 

        var obj = { 
         "id": uuid.v4(), 
         // "timestamp": new Date().getTime(), 
         "device_id": device.id, 
         "data":{ 
          "stats":{ 
          }, 
          "list":{ 
          } 
         } 
        }; 

        var allPromises=[];     

        allPromises.push(Controllers.Gps.getRadioInfo('wsniffer', 'stats', {}, device)); 
        allPromises.push(Controllers.Gps.getRadioInfo('wsniffer', 'list', {}, device)); 

        Promise.all(allPromises).then(function(values){ 
         console.log("probing values -> "+device.id+" "+ JSON.stringify(values));  
         for(var j=0;j<values.length;j++){ 
          if(values[j]!=null){ 
           console.log("stats "+device.id+" --> "+ values[0]["stats"]); 
           console.log("list "+device.id+" --> "+ values[1]["list"]); 
           if(values.stats["stats"]!=undefined){ 
            obj.data.stats = values[0]["stats"]; 
           } 
           if(values.stats["list"]!=undefined){ 
            obj.data.list = values[1]["list"]; 
           }        
          } 
         } 
         var countRepetidos=0; 
         if(obj["list"]!=undefined && obj["list"].length>0){      

          var aux = obj["list"]; 
          for(var j=1;j<aux.length;j++){ 
           var tmp = aux; 
           for(var k=1;k<tmp.length;k++){ 
            if(j!=k){ 
             if(aux[j] === tmp[k]){ 
              countRepetidos++; 
              aux.splice(k,1); 
             } 
            } 
           } 
          } 
         } 

         var dataLive = []; 
         var dataRepeated= []; 
         var dataPasserBy = []; 

         var now = Date.now(); 

         var listaLive=[], listaRepeated=[], listaPasserBy=[]; 

         if(obj.data.stats!=undefined){ 
          dataLive = [obj.data.stats.since, obj.data.stats.live]; 
          dataPasserBy = [obj.data.stats.since, obj.data.stats.passerby]; 
         } 

         dataRepeated = [obj.data.stats.since, countRepetidos]; 


         createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'probing', 'obj', obj); 

         listaLive.push(dataLive); 
         listaRepeated.push(dataRepeated); 
         listaPasserBy.push(dataPasserBy); 

         Controllers.Agregate.agregateData("probing_live", 5 * 60, listaLive, dbHistConnectionString, device.id, device.network_id, device.organization_id, ["time","clients"]); 
         Controllers.Agregate.agregateData("probing_repeated", 5 * 60, listaRepeated, dbHistConnectionString, device.id, device.network_id, device.organization_id, ["time","clients"]); 
         Controllers.Agregate.agregateData("probing_passerBy", 5 * 60, listaPasserBy, dbHistConnectionString, device.id, device.network_id, device.organization_id, ["time","clients"]); 
         Database.Probing.addRow(obj); 

         global.listaLive = listaLive; 
         global.listaRepeated = listaRepeated 
         global.listaPasserBy = listaPasserBy 


        }).catch(function (e) { // error handling 
         console.log("probing - promiseall ",device.id,e); 
         if(values==null){ 
          console.log('probing values null ---->', device.id); 
         } 
         createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'probing', 'no promise all',e); 
         return callback(e); 
        }); 


      }, function (error) { 
       if (error) { 
        createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'probing', 'stops polling?!', error); 
        return reject(error); 
       } 
       createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'probing','All Devices Processed'); 
       return resolve(); 
      }); 
     }).catch(function (e) { 
      console.log("probing 1--> ",e); 
      createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'probing','promise',e); 
     }); 
    }).catch(function (e) { 
     console.log("probing 2--> ",e); 
     createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'probing','getDevices',e); 
    }); 

} 

Logs:

3|wscontro | probing stats { since: 1500454284751, 
3|wscontro | probing list [ '00:05:ca:e4:85:39', 
3|wscontro | probing dataStatsSince --> 1500454284751 
3|wscontro | probing dataStatsLive --> 236 
3|wscontro | probing dataStatsPasserBy --> 134 
3|wscontro | probing listaLive --> [ [ 1500454284751, 236 ] ] 
3|wscontro | probing listaRepeated --> [ [ 1500454284751, 0 ] ] 
3|wscontro | probing listaPasserBy --> [ [ 1500454284751, 134 ] ] 



3|wscontro | [2017-07-18 15:07:42.834] - debug: /opt/wscontroller/wscontroller-service/scripts/agregate AgregateController b2aaba26-dea0-4b2e-9b6e-6fe91c566ee9 recursviva data {"id":"c0a2941f-e617-4c14-95de-4506565b28d1","agregation_period":300,"medium":[0],"maximum":[0],"minimum":[0],"timestamp":[null,0],"sum":[null],"type":"probing_repeated","device_id":"b2aaba26-dea0-4b2e-9b6e-6fe91c566ee9","network_id":"7e709c63-45c5-4716-b596-ece3468b25f9","organization_id":"ce4b69af-bdce-4f1b-ba71-dd03544205d5","labels":["time","clients"]} 

Wo "Zeitstempel" und "Summe" sind die Werte auf der Agregate innerhalb von listaLive, listaRepeated und listaPasserBy.

3|wscontro | probing timestamp [ undefined, 0 ] 
3|wscontro | probing sum undefined 

Ich brauche diese Werte von der Liste auf Agregator ...

+0

Wo versuchen Sie, eine Variable in einer anderen Datei zu verwenden? Welche Zeile gibt Ihnen diesen Fehler? Wenn dies Node.js ist, verwenden Sie keine globalen Variablen. Verwenden Sie Module. –

+0

Ich benutzte die kommentierte Zeile //obj["data"].stats=statsData["stats "], um die Daten zu verwenden, und es löst den angegebenen Fehler aus, aber nachdem der Fehler aufgetreten ist, erscheint dowest nicht mehr zu verstehen ... wann immer noch empty löst den Fehler aus ... ich brauche diese Daten über den AgregateController zu verstehen .. aber in dieser Datei sind die übergebenen Daten null ... – ricardol

Antwort

0

Sie einen beliebigen Wert teilen können Sie das exports-Objekt werden soll.

Versuchen Sie also, Ihre var-Variable mithilfe von Exporten zu exportieren. Beispiel:

**helper.js** 

const hello = 'hello world' 
exports.hello = hello 

**index.js** 

const example = require('./helper.js').hello 
console.log(example) //Will show 'hello world' 
+0

ich verstehe .. wenn ich Auflösung verwende kann ich den Wert nicht übergeben? Ist das nicht so? : http://plinkr.co/edit/telrz9HAdVEwq18pJ5js?p=preview mein Code hier – ricardol

+0

Ich glaube, ich habe Ihre Frage missverstanden. Wenn Sie Versprechungen mit Entschlossenheit verwenden, können Sie beliebige Daten übergeben. Sobald Sie Ihr Versprechen in einer anderen Datei aufgerufen haben, wird die '' 'then''' Methode Ihrer Variablen folgen. Hier haben Sie einige Dokumentation, die Ihnen helfen kann mit diesem https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve – LuisPinto

+0

Ich habe versucht, in den Code zu lösen (listaLive) und nichts passiert auf der anderen Datei ... wie kann ich tun? http://pnnr.co/edit/telrz9HAdVEwq18pJ5js?p=preview mein Code aktualisiert – ricardol

Verwandte Themen