首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >值在控制器nodejs之间未定义

值在控制器nodejs之间未定义
EN

Stack Overflow用户
提问于 2017-07-18 22:03:20
回答 1查看 116关注 0票数 0

我试图在其他文件中使用var值,如果我在代码的开头定义它,它会引发错误"Cannot read property 'stats‘of null“,所以我尝试使用全局变量,但这没有帮助,总是在我的其他文件中获取null。

我需要在其他文件中获取listaLive、listaRepeated和listaPasserBy的值,我将这些数据发送到该文件中进行处理,然后插入到db (AgregateController)中。

当时我的代码是:

代码语言:javascript
复制
 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);
    });

}

日志:

代码语言:javascript
复制
 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"]}

其中"timestamp“和"sum”是listaLive、listaRepeated和listaPasserBy内部聚合器上的值。

代码语言:javascript
复制
3|wscontro | probing timestamp  [ undefined, 0 ]
3|wscontro | probing sum  undefined

我需要这个列表的值在聚合器上...

EN

回答 1

Stack Overflow用户

发布于 2017-07-18 22:30:39

您可以使用exports对象共享任何您想要的值。

所以尝试使用exports导出您的var变量。示例:

代码语言:javascript
复制
**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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45169073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档