跨多个文件Node.js使用整个数组

时间:2017-11-19 00:06:14

标签: javascript arrays 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中的代码)(它是一个telnet服务器)

telnetSocket.on('data', function (data) {

talkAll(myArray, telnetSocket.name + ">" + data, telnetSocket);
});

我需要将它分成一个模块,但是当我执行我的second.js文件时根本不能使用myArray。错误的是没有定义数组。然而,当我尝试在second.js中定义它时,甚至尝试构建一个函数来获取该数组。数组变为空白。

以下jcaron提供的答案对我有用。还有孩子,请确保您在10分钟内没有编辑错误的脚本。

2 个答案:

答案 0 :(得分:0)

如果主文件中定义了myArrayrequire是另一个文件,则需要将数组传递给第二个文件中的函数。

var myArray = [];

var myModule = require('mymodule');
...
myModule.talkAll(myArray,message,sender);

当然,您需要将该参数添加到talkAll函数中。

根据您实施模块的具体程度,有很多选择。您还可以使用函数将局部变量设置为该数组。

答案 1 :(得分:0)

将数组从main.js传递到单个模块的另一种方法是使数组本身成为任何需要它的模块所需的模块。

使这项工作的目的是要意识到节点模块不仅仅是缓存的,而且实际上是正确的singletons。这意味着每次导入模块时都会导入相同的对象。

实现本身就是简单的:

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];