Fur*_*ous 1 javascript global-variables
我想创建一个可供所有.js文件访问的数组.此数组也必须是可更新的,并且更新的更改必须反映在使用该数组的所有其他文件中.
我已经读过使用GLOBAL变量不是一个好方法,但是替代方案是什么?
//file 1 which contains my global variable
var mySharedArray = ['helo'];
module.exports = {
mySharedArray: mySharedArray,
get: function(){
console.log(mySharedArray);
}
}
//file 2 where i am pushing new-data
router.get('/workerequestest',function(req,res){
queue.push("moreData");
require('../config/globalQueue').get();
require('../config/startWorkerQueue');
res.send(200,'message recieved');
});
//file 3 where i am checking the updated values
var interval = setInterval(function() {
var Queue = require('../config/globalQueue').mySharedArray;
require('../config/globalQueue').get();
}, 10000,'hello' ,'checking for New processes');
Run Code Online (Sandbox Code Playgroud)
node.js中的正确模块化不使用实际的全局变量,因为这实际上利用了可重用模块更复杂,并且可能与其他全局变量发生冲突.
可以使用的一种设计模式是将共享数据放在其自己的模块中,然后只require()在需要的模块中放置.
// shared-data.js
var mySharedArray = [...];
module.exports = {
mySharedArray: mySharedArray
}
Run Code Online (Sandbox Code Playgroud)
然后,在每个想要访问该数组的模块中,您可以执行以下操作:
// someothermodule.js
var sharedArray = require('./shared-data.js').mySharedArray;
// this modification will change the main array and will be seen by
// all modules that are sharing it
sharedArray.push("moreData");
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为在Javascript中分配数组时,不会复制它们,而是共享指向原始数组的指针.因此,对指定值的任何修改只是指向原始对象,从而更改原始数组.因此,所有模块都可以访问相同的原始数组.
我刚刚在我自己的三个文件中测试了这个概念,它运行正常.这是我的三个文件:
服务器文件:
// shared-server.js
var express = require('express');
var app = express();
var server = app.listen(80);
var shared = require('./shared-var');
require('./shared-interval.js')
var cntr = 0;
app.use(express.static('public'));
app.get("/test", function(req, res) {
shared.mySharedArray.push(++cntr);
shared.get();
res.send(200,'message received');
});
Run Code Online (Sandbox Code Playgroud)
共享变量文件:
//shared-var.js
var mySharedArray = ['helo'];
module.exports = {
mySharedArray: mySharedArray,
get: function(){
console.log(mySharedArray);
}
}
Run Code Online (Sandbox Code Playgroud)
间隔文件:
//shared-interval.js
var interval = setInterval(function() {
require('./shared-var').get();
}, 1000);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它输出mySharedArray每秒的值.每次我使用浏览器访问http:// localhost/test时,它都会添加一个新值mySharedArray,我会在控制台中看到它.这是我期望的行为.
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |