簡體   English   中英

Nodejs持久變量

[英]Nodejs Persistent Variable

是否有某種類似於Session的變量在Node.js中保存數組? 我的意思就像是可以在其他作用域中定義名稱並在不同作用域中訪問的名稱(即:Variable(“ Array1”)在函數A中定義但在函數B中訪問並一直存在直到被銷毀)。

原因是我正在使用Meteor將大文件切成小塊並將其傳回服務器。 我嘗試使用fs.WriteFilefs.AppendFile的組合,但是在某種程度上fs.AppendFile了該文件(該文件是視頻,並且復制的文件發生播放錯誤)。

我讀過某個地方,可以由構造函數重建Blob。 但是,我需要將其傳遞給全局或類似會話的變量。

那么...如何在Node.js中使用這種東西?

有這樣的事情–它被稱為數據庫:-)


在Meteor中時,所有文件都被加載到單個運行環境中。 因此,與普通節點不同,可以在任何其他文件中訪問在一個文件中創建的全局變量。 所以你可以寫

Slices = {};

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

Slices['Array1'] = ...

請注意,在定義Slices對象時沒有var關鍵字,否則它不是全局的,而是作用於文件。


顯然,上述方法存在一個問題,它是服務器重載的持久性。 當服務器崩潰並重新啟動時,或者當您上載新版本時,所有此類變量都會重新創建,並且您將丟失數據。

為避免這種情況,您需要將變量存儲在永久保留的位置,即某種數據庫。 有多種針對此類運行時變量(例如Redis)的解決方案,但是由於使用的是Meteor,自然的解決方案是使用提供的Mongo數據庫。 因此,只需在服務器端創建一個新集合

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

並使用通常的findinsertupdateremove方法訪問變量。

如果一切都發生在相同的處理空間中,則可以將模塊用作單例。

請記住,即使多次包含一個模塊,也會返回相同的副本。

因此,如果您有此模塊:

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

在此處了解有關模塊緩存的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM