Nodejs持久variables
是否有某种类似Session的variables来保存Nodejs中的数组? 我的意思是像我可以在其他范围内定义名称,并在不同范围内访问(即:variables(“Array1”)在函数A中定义,但在函数B中访问并保留,直到它被销毁)。
原因是我使用Meteor将大文件分割成小块并将块传回服务器。 我试图使用fs.WriteFile
和fs.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');
并使用通常的find
, insert
, update
和remove
方法来访问您的variables。