Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs持久变量_Javascript_Node.js_Meteor - Fatal编程技术网

Javascript Nodejs持久变量

Javascript Nodejs持久变量,javascript,node.js,meteor,Javascript,Node.js,Meteor,是否存在某种类似会话的变量来保存Nodejs中的数组? 我的意思是,我可以在其他作用域中定义名称,并在不同的作用域中访问(即:变量(“Array1”)在函数A中定义,但在函数B中访问,并一直保持到它被销毁) 原因是我正在使用Meteor将大文件分割成小块,并将其传回服务器。我尝试使用fs.WriteFile和fs.AppendFile的组合,但不知何故,该文件在使用过程中被破坏(该文件是一个视频,复制的文件出现了播放错误) 我在某个地方读到,blob可以由构造函数重建。但是,我需要将其传递给一个

是否存在某种类似会话的变量来保存Nodejs中的数组? 我的意思是,我可以在其他作用域中定义名称,并在不同的作用域中访问(即:变量(“Array1”)在函数A中定义,但在函数B中访问,并一直保持到它被销毁)

原因是我正在使用Meteor将大文件分割成小块,并将其传回服务器。我尝试使用
fs.WriteFile
fs.AppendFile
的组合,但不知何故,该文件在使用过程中被破坏(该文件是一个视频,复制的文件出现了播放错误)

我在某个地方读到,blob可以由构造函数重建。但是,我需要将其传递给一个全局变量或类似会话的变量才能这样做


那么…我怎么能在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());

阅读有关模块缓存的内容。

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

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

因此,如果您有此模块:

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());

阅读有关模块缓存的内容。

有这样一种东西——它被称为数据库:-)


在Meteor中,所有文件都加载到单个运行环境中。因此,与普通节点不同,在一个文件中创建的全局变量可以在任何其他文件中访问。这样你就可以写作了

Slices = {};
在一个文件中,然后在另一个文件中

Slices['Array1'] = ...
请注意,在定义
切片
对象时,没有
var
关键字,否则它将不是全局的,而是作用于文件


显然,上述方法有一个问题,就是服务器重新加载时的持久性。当服务器崩溃并重新启动时,或者当您上载新版本时,所有这些变量都将重新创建,您的数据将丢失

为了防止这种情况,您需要将变量存储在永久保留它们的地方——某种数据库。有几种针对此类运行时变量定制的解决方案(如Redis),但由于您使用的是Meteor,自然的解决方案是使用提供的Mongo数据库。因此,只需在服务器端创建一个新集合

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

并使用常用的
查找
插入
更新
删除
方法来访问变量。

有这样一种方法——它被称为数据库:-)


在Meteor中,所有文件都加载到单个运行环境中。因此,与普通节点不同,在一个文件中创建的全局变量可以在任何其他文件中访问。这样你就可以写作了

Slices = {};
在一个文件中,然后在另一个文件中

Slices['Array1'] = ...
请注意,在定义
切片
对象时,没有
var
关键字,否则它将不是全局的,而是作用于文件


显然,上述方法有一个问题,就是服务器重新加载时的持久性。当服务器崩溃并重新启动时,或者当您上载新版本时,所有这些变量都将重新创建,您的数据将丢失

为了防止这种情况,您需要将变量存储在永久保留它们的地方——某种数据库。有几种针对此类运行时变量定制的解决方案(如Redis),但由于您使用的是Meteor,自然的解决方案是使用提供的Mongo数据库。因此,只需在服务器端创建一个新集合

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

并使用常用的
查找
插入
更新
删除
方法访问变量。

注意:这是使用plain Node.js时的正确方法,但在Meteor项目中不起作用。注意:这是使用plain Node.js时的正确方法,但是在Meteor项目中不起作用。关于临时/传输文件块的数据库使用的好建议。但我发现,没有斑点使我的生活很困难+1我不知道你所说的“没有斑点”是什么意思。缓冲区和base-64字符串工作得很好,如果你小心的话,字节字符串也可以。事实上,我试图剪切一个大文件(大约1gb),并通过架构将其传输到服务器端。我使用了FileReader()readAsBinaryString(返回为blob),但不知怎的,当我连接它时,文件发生了错误。我注意到nodej作为缓冲区写入,但我传递了blob。这可能是个问题,但是当我检查Nodejs文档时,我没有发现框架中使用的任何blobtype。我能找到的最好的方法是以ArrayByte的形式传输,但对于大数据块(1MB+数据块的浏览器崩溃)效果不佳。现在我改用collectionFS。关于临时/传输文件块的数据库使用,这是一个很好的建议。但我发现,没有斑点使我的生活很困难+1我不知道你所说的“没有斑点”是什么意思。缓冲区和base-64字符串工作得很好,如果你小心的话,字节字符串也可以。事实上,我试图剪切一个大文件(大约1gb),并通过架构将其传输到服务器端。我使用了FileReader()readAsBinaryString(返回为blob),但不知怎的,当我连接它时,文件发生了错误。我注意到nodej作为缓冲区写入,但我传递了blob。这可能是个问题,但是当我检查Nodejs文档时,我没有发现在中使用的blobtype