2015-03-11 2 views
1

Мне просто нужно знать, как сохранить содержимое массива. Я делаю это, но массив пуст при подключении новых пользователей.NodeJS module.exports, сохранить содержимое массива

module.exports = function(){ 
    var clients = []; 
    function push_clients(a) { 
      clients.push(a); 
    } 
    global.socket.of('/fsdd6SDF86QS').on('connection', function(socket) { 
     socket.on('user-ready', function(data) { 
        console.log('init clients: '+clients); 
        push_clients(socket.id); 
        console.log('final clients: '+clients); 
     }); 
    } 
}(); 

До того как я попробовал: clients.push(socket.id);, но с тем же результатом. Любая идея?

+0

, как вы используете экспортированную функцию ? т. е. можете ли вы показать код, в котором вам нужен этот модуль? –

ответ

0

В вашем случае клиентская переменная является локальной и нет способа получить ее снаружи. Лучше решения экспортировать только функцию, а затем сделать экземпляр + делает клиент переменного свойство объекта:

module.exports = function(){ 
    this.clients= []; 
    this.push_clients = function (a) { 
      this.clients.push(a); 
    } 
    self = this; 
    /* .. */ 
     console.log('init clients: '+clients); 
     self.push_clients(socket.id); // or just self.clients.push(socket.id); 
} 

И в другом модуле называет это нравится:

var Sockets = require("your_module_path"); 
var sockets = new Sockets(); 
sockets.clients // here will collect connected users 
+0

Благодарим вас за этот ответ, но я стартер в nodejs, но я не видел, как добавлять клиентов с внешним модулем. Если это так: sockets.push_clients (socket.id); это вок? – Jiremek

+0

Когда вы создаете новый экземпляр (var sockets = new Sockets();) ваша функция-конструктор будет вызвана, и сокет-сервер начнет прослушивать сокет-клиент, а на 'user-ready' событие будет называться this.push_clients (извините, Я не упоминал об этом) просто будьте осторожны с контекстом 'this' –

+0

Я отредактировал пример –

Смежные вопросы