Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单例公共方法getInstance在定义后不是函数_Javascript_Node.js_Express_Singleton_Node Modules - Fatal编程技术网

Javascript 单例公共方法getInstance在定义后不是函数

Javascript 单例公共方法getInstance在定义后不是函数,javascript,node.js,express,singleton,node-modules,Javascript,Node.js,Express,Singleton,Node Modules,我测试了DataService类中的其他函数。每次我都会遇到相同的错误:TypeError:service.getInstance不是函数 我不确定我做错了什么。我正在尝试创建一个Singleton对象来处理我的应用程序的数据服务 main_app/services/DataService.js var DataService = (function() { var TIME = 15000; let Queue = require('../scripts/Queue

我测试了DataService类中的其他函数。每次我都会遇到相同的错误:TypeError:service.getInstance不是函数

我不确定我做错了什么。我正在尝试创建一个Singleton对象来处理我的应用程序的数据服务

main_app/services/DataService.js

var DataService = (function() {
    
    var TIME = 15000; 
    let Queue = require('../scripts/Queue')
    const uxQueue = new Queue();
    const uxQueue_Buffer =new Queue()
    const queueL1 = new Queue()
    const queueL1_Buffer = new Queue()
    const queueL2 = new Queue()
    const queueL2_Buffer =new Queue()
    const queueL3 = new Queue()
    const queueL3_Buffer =new Queue()
    const queueL4 = new Queue()
    const queueL4_Buffer =new Queue()
    
    const LEVEL_MINUTE = 4; //L1
    const LEVEL_HOUR = 60; //L2
    const LEVEL_DAY = 24; //L3
    const LEVEL_WEEK = 7; //L4
    const UX_LEVEL = 50; //L0 

    //Response for last retrieved data source
    var current_response;

  function queueCheck(queue, level){
    if(level === 0){
        return queue.length === UX_LEVEL;
    }
    if (level === 1){
        return queue.length === LEVEL_MINUTE;
    };
    if(level === 2){
        return queue.length === LEVEL_HOUR;
    };
    if(level === 3){
        return queue.length === LEVEL_DAY; 
    };
    if(level === 4){
        return queue.length === LEVEL_WEEK;
    };
};

function flush(queue){
    var size = queue.length;
    while(!queue.isEmpty()){
        var item = queue.dequeue();
    }
}
//Add item to queue  
function queuer(queue, buffer, level, response){
    if (!queueCheck(queue, level)){ // If queue is not full
            queue.enqueue(response);
            console.log('Queuing');
        }else{
            console.log('Queue is full! Enqueuing buffer');
            buffer.enqueue(response);
        }
}    

function executeQueue(response, levels){
    levels.forEach(element => {

        if(element === 0){
        queuer(queueL1, queueL1_Buffer, element, response);
        }else{
        queuer(uxQueue, uxQueue_Buffer, element, response);
        };
        
        
    });

}

function fetchData(){
        require("got").get("https://data.messari.io/api/v2/assets?sort")
        .json()
        .then(response => {
             const size = Buffer.byteLength(JSON.stringify(response));
             const kiloBytes = size / 1024;
             const megaBytes = kiloBytes / 1024;
             console.log('Mega bytes received', megaBytes);
    }).then(response => {
        current_response = response;

    }).then(response => {
        const levels = [0,1];
        executeQueue(response, levels);
    });
};
function getClientQueue(){
    return uxQueue;
};

function getCurrentTime(){
    const time = current_response['status'];
    return time['timestamp'];
};

function getSymbol(){
    const data = current_response['data'];
    return data['symbol'];
};
setInterval(fetchData, TIME);
var instance;
 return { // public interface
    getInstance : function(){
        if(instance == null){
            instance = new DataService();
            instance.constructor = null;
        };
        return instance;
    }
  };
})();

主应用程序/控制器/分析控制器.js

const service = require('../services/DataService')
 var dataService = service.getInstance();


var path = require('path');
//display home page
exports.home_page = function(req, res){
    res.sendFile(reqPath+'/views/home.html');
};

exports.get_mc_index = function(req, res){
    res.send('NOT IMPLEMENTED. Market caps ');
};

exports.get_mc_index = function(req, res){
    res.send('NOT IMPLEMENTED. Market cap index');
};

exports.get_ji_index = function(req, res){
    res.send('NOT IMPLEMENTED. J index');
};

exports.get_vi_index = function(req, res){
    res.send('NOT IMPLEMENTED. V index');
};

exports.get_symbol = function(req, res){
    try {
        
        sym = dataService.getCurrentTime();
        res.send('Success ' + sym);
    } catch (error) {
        
        res.send('Failed ' + error);
    }
}

exports.fetch_data = function(req, res){
    try {
        time = test.getCurrentTime();
        res.send('Successful');
        console.log('current time stamp ', time );
    } catch (error) {
        res.send('Failed');
    }
};


// Go back 1 directory
let reqPath = path.join(__dirname, '../');


我在DataService中没有看到module.exports。 :) 因此,您的“require”不返回任何内容

此外,每个必需的文件都是单例文件,因此您的单例策略可能是不必要的

例如,如果您在许多文件中需要A.js,您仍然只能执行一次A的代码

例如,试试这个:

// A.js
console.log('a loaded');
module.exports = function() {};
// B.js
var a = require('a.js');
console.log('b loaded');
module.exports = function() {};
// C.js
var a = require('a.js');
var b = require('b.js');
console.log('c loaded');
将显示

a loaded
b loaded
c loaded

我尝试过这样做,但仍然遇到了同样的问题:TypeError:service.getInstance不是函数