Javascript 单例公共方法getInstance在定义后不是函数
我测试了DataService类中的其他函数。每次我都会遇到相同的错误:TypeError:service.getInstance不是函数 我不确定我做错了什么。我正在尝试创建一个Singleton对象来处理我的应用程序的数据服务 main_app/services/DataService.jsJavascript 单例公共方法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
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不是函数