[英]Use an entire array across multiple files Node.js
好的,這是我的問題。 我的“主文件”中有一個數組,我需要能夠在其他文件中使用該數組。
var myArray = []
該陣列容納連接到我的服務器的套接字,因此它在不斷變化
function putsSocketsInArray () {
myArray.push(rawSockets) }
現在,我想在另一個腳本中使用該數組,以寫入該數組中的所有套接字。
'use strict'
//broadcast function
function talkAll (myArray, message, sender) {
myArray.forEach(function (connection) {
//don't want to send it to sender
if (connection === sender) return;
connection.write(`${message} \n`);
});
}
module.exports = talkAll
只要函數talkAll是相同的“ main.js”文件,此方法就起作用。
(main.js中的代碼)(這是一個遠程登錄服務器)
telnetSocket.on('data', function (data) {
talkAll(myArray, telnetSocket.name + ">" + data, telnetSocket);
});
好吧,我需要將其分離到一個模塊中,但是當我這樣做時,second.js文件根本無法使用myArray。 將會錯誤地指出未定義數組。 但是,當我嘗試在second.js中定義它,甚至嘗試構建一個函數來獲取該數組時。 數組變為空白。
下面的jcaron提供的答案對我有用。 另外,請確保您在10分鍾內沒有編輯錯誤的腳本。
如果myArray
是在主文件中定義的( require
另一個文件),則需要將數組傳遞給第二個文件中的函數。
var myArray = [];
var myModule = require('mymodule');
...
myModule.talkAll(myArray,message,sender);
當然,您需要將該參數添加到talkAll函數中。
有許多替代方法,具體取決於您實現模塊的方式。 您還可以使用一個函數來為該數組設置局部變量。
將數組從main.js傳遞到各個模塊的另一種方法是使該數組本身成為任何需要它的模塊所需要的模塊。
完成這項工作的目的是認識到節點模塊不僅被緩存,而且實際上是適當的單例 。 這意味着每次導入模塊時,都會導入同一對象。
實現本身就是簡單性:
在shared-array.js
:
var sharedArray = [];
module.exports = sharedArray;
在任何創建套接字的文件中:
var sharedArray = require('./path/to/shared-array');
// ...
sharedArray.push(socketObject);
在需要使用這些套接字的任何文件中:
var sharedArray = require('./path/to/shared-array');
// ...
var socket = sharedArray[socketIndex];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.