Nodejs中是否有某种类似会话的变量来保存数组?我的意思是,我可以在其他范围中定义名称,并在不同的作用域中访问(即:变量(“Array1”)在函数A中定义,但在函数B中访问,直到被销毁为止)。
原因是我使用Meteor将大文件切片成小块并将其传回给服务器。我尝试使用fs.WriteFile和fs.AppendFile的组合,但不知怎么的,这个文件一直被肢解(文件是一个视频,复制的文件出现了回放错误)。
我在某个地方读到blob可以由构造函数重建。但是,为了做到这一点,我需要将它传递给全局变量或类似会话的变量。
So...how我可以在Nodejs中使用这样的东西吗?
发布于 2014-08-21 06:21:02
如果一切都发生在相同的进程空间中,则可以使用模块作为单例。
记住,即使一个模块被多次包含,也会返回相同的副本。
因此,如果您有这个模块:
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());了解有关模块缓存这里的内容。
发布于 2014-08-21 06:28:13
有这样的东西--它叫做数据库:)
在Meteor中,所有文件都加载到一个运行环境中。因此,与普通节点不同,在一个文件中创建的全局变量可以在任何其他文件中访问。所以你可以写
Slices = {};在一个文件中,然后在另一个文件中
Slices['Array1'] = ...注意,在定义var对象时没有Slices关键字,否则它将不是全局的,而是限定为文件的。
显然,上述方法存在一个问题,即服务器重新加载时的持久性问题。当服务器崩溃和重新启动时,或者当您上传一个新版本时,所有这些变量都会被重新创建并丢失数据。
为了防止这种情况,您需要将变量存储在一个永久保留变量的位置--某种数据库。有几种针对此类运行时变量(如Redis)的解决方案,但由于您使用的是Meteor,自然的解决方案将是使用提供的Mongo数据库。因此,只需在服务器端创建一个新集合即可。
Slices = new Meteor.Collection('slices');并使用通常的find、insert、update和remove方法访问变量。
https://stackoverflow.com/questions/25416871
复制相似问题