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 ...
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. –
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