Nodejs持久variables

是否有某种类似Session的variables来保存Nodejs中的数组? 我的意思是像我可以在其他范围内定义名称,并在不同范围内访问(即:variables(“Array1”)在函数A中定义,但在函数B中访问并保留,直到它被销毁)。

原因是我使用Meteor将大文件分割成小块并将块传回服务器。 我试图使用fs.WriteFilefs.AppendFile的组合,但不知fs.AppendFile的文件是沿途被毁坏的(文件是一个video和复制文件发生播放错误)。

我读到blob可以由构造函数重build的地方。 不过,我需要将其传递给全局variables或会话variables才能这样做。

所以…我怎么能在Nodejs中使用这样的东西?

如果所有的事情都发生在同一个进程空间中,你可以使用一个模块作为单例。

请记住,即使多次包含模块,也会返回相同的副本。

所以如果你有这个模块:

 module.exports = new Array(); 

你可以通过其他几个模块来包含它们,每个模块都有相同的数组实例。

你也可以有一个更复杂的单身人士:

 var blocks = {}; module.exports.addBlock = function(name, block) { blocks[name] = block; }; module.exports.getBlock = function(name) { return blocks[name]; }; module.exports.delBlock = function(name) { delete blocks[name]; }; module.exports.list = function() { return Object.keys(blocks); }; 

在你的不同的文件中,你将包括和使用这个模块,如:

 var blocks = require('./blocks'); console.log(blocks.list()); 

在这里阅读模块caching。

有这样的事情 – 它被称为数据库:-)


当你在Meteor里时,所有的文件都被加载到一个运行环境中。 因此,与普通节点不同,在一个文件中创build的全局variables可以在任何其他文件中访问。 所以你可以写

 Slices = {}; 

在一个文件中,然后在另一个文件中

 Slices['Array1'] = ... 

注意在定义Slices对象时没有var关键字,否则它不是全局的,而是作用于文件。


上面的方法显然存在一个问题,它是通过服务器重新加载的持久性。 当服务器崩溃并重新启动,或者当您上传新版本时,所有这些variables都会重新创build,您将丢失数据。

为了防止这种情况,您需要将variables存储在永久保存的地方 – 某种数据库。 有几种针对这种运行时variables的解决scheme(如Redis),但是由于您使用的是Meteor,自然的解决scheme就是使用提供的Mongo数据库。 所以只需在服务器端创build一个新的集合

 Slices = new Meteor.Collection('slices'); 

并使用通常的findinsertupdateremove方法来访问您的variables。