现在遇到一个问题,在一个模块中读取数据库数据保存到一个对象中,使其他模块能够通过exports访问到它,但如何让这个模块的对象能够像java中的static变量一样,就是当一个模块对该对象操作时,其他模块再访问这个变量时也能够得到更改后的这个对象,求各位解答?下面是我的一个模块的代码, var express=require(‘express’); var query= require(’…/lib/db/mysql’); var listMap={}; var init=function(){ query(‘select number,state from device’,function(err,vals,fileds){ if(err){ console.log(err); }else{ vals.forEach(function(item,index,arr){ //console.log( item.constructor); listMap[index]=item; }); } }) } module.exports.init=init; module.exports.listMap=listMap;
t1.js
let a = { ttt:123 }
module.exports.a = a;
t2.js t3.js
let a = require('./t1');
function printa(){
console.log(a);
}
function seta(t){
a.a[t]=t;
}
module.exports = {
printa,
seta,
}
test
t2 = require('./t2')
t3 = require('./t3')
t2.printa()
//{ a: { ttt: 123 } }
t3.printa()
//{ a: { ttt: 123 } }
t2.seta('aaaa')
t3.printa()
//{ a: { ttt: 123, aaaa: 'aaaa' } }
意思是需要被更改数据的模块,在其他模块中都要事先加载,同时也需要暴露能够更改的接口?,我怎么感觉你这样写这么麻烦呢,seta和printa直接放在t1模块中不行吗?
贴段代码,求指点:
var express=require('express');
var query= require('../lib/db/mysql');
function MapList(){
global.listMap={};
this.init=function(){
query('select number,state from device',function(err,vals,fileds){
if(err){
console.log(err);
}else{
vals.forEach(function(item,index,arr){
//console.log( item.constructor);
listMap[item.number]=new Array(item.state.toString());
});
}
})
};
this.getData=function(){
return JSON.stringify(listMap);
//return listMap;
}
this.updateData=function(key,value){
listMap[key]=value;
}
}
module.exports=MapList;
在其他模块中我修改listMap这个对象,
var MapList=require('./rfidlist');
var mapList1=new MapList();
mapList1.updateData("7","11112");
console.log(mapList1.getData());
直接用redis阔以吗
@nnliang 没尝试用这个,应该不会像操作mysql数据库那样需要很长时间吧
@lanfengZhou redis 把你要的数据缓存在内存里,拿和存都比较容易的
@lanfengZhou 你要考虑到,如果多个模块同时操作这个对象中的同一个key的情况