2017-11-19 11 views
0

これは私の問題です。私は私の "メインファイル"の配列を持っていて、私は他のファイル間でその配列を使用できるようにする必要があります。それは常に複数のファイルにわたって配列全体を使用するNode.js

function putsSocketsInArray() { 
myArray.push(rawSockets) } 

を変更していますので、

var myArray = [] 

この配列は、今私は、アレイ内のすべてのソケットへの書き込みを別のスクリプトでは、例えばその配列を使用したい、私のサーバーに接続するソケットを保持しています。

'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のを使用することはできません(これは、telnetサーバがあります)まったく。配列が定義されていないとエラーになります。しかし、私がsecond.jsでそれを定義しようとする試みをしたり、その配列を取得する関数を作成しようとするときにも。配列は空白になります。

以下のjcaronから提供された回答が私のために働いていました。子供たちも、間違ったスクリプトを10分間編集していないことを確認してください。

+1

エクスポートする必要があります。 – SLaks

+0

配列をエクスポートするたびに、私の.forEachエラーが関数ではないことがわかります –

+0

それは間違っています。 – SLaks

答えて

0

main.jsから個々のモジュールに配列を渡す代わりに、配列自体を、それを必要とするモジュールが必要とするモジュールにすることもできます。

ノードモジュールが単にキャッシュされているのではなく、実際にはsingletonsであることを認識することです。つまり、モジュールがインポートされるたびに同じオブジェクトがインポートされます。

実装はシンプルそのものです:

:それらのソケットを使用する必要がある任意のファイルで

var sharedArray = require('./path/to/shared-array'); 
// ... 
sharedArray.push(socketObject); 

:ソケットを作成し、任意のファイルで

var sharedArray = []; 
module.exports = sharedArray; 

shared-array.js

var sharedArray = require('./path/to/shared-array'); 
// ... 
var socket = sharedArray[socketIndex]; 
+0

うわーは魅力的に機能しました!ありがとう、それは本当に素晴らしい方法です! –

0

myArrayがメインファイル(require)に定義されている場合は、2番目のファイル内の関数に配列を渡す必要があります。

var myArray = []; 

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

もちろん、あなたのtalkAll関数にその引数を追加する必要があります。

モジュールをどの程度正確に実装したかによって、多くの選択肢があります。また、その配列にローカル変数を設定する関数を持つこともできます。

+0

私は2番目のファイルに配列を分離しようとすると、まだconnections.forEachに問題が発生しています。 TypeError:connections.forEachは関数ではありません –

+0

質問を編集して、更新されたコードを追加してください。 – jcaron

+0

私が更新されました。もっと必要な場合は、私のmain.jsが70's以上です。しかし、myArray.forEachを試してみると、私のスクリプトはtalkAll.jsファイルで特にシャットダウンしています。 myArray.forEachが関数ではないことを示す –

関連する問題