Как правильно разделить логику на файлы socket.io сервера?

Добрый день.
Пытаюсь разделить логику сервер Websocket, чтобы все события не были в одном файле.
Нашёл вот такой пример:
const io = require('socket.io')(server)
var  Shops = require('./EventHandlers/handShops')
var app = {
    allSockets: []
}
io.on('connection', socket => {
    var eventHandlers = {
        shops: new Shops(app, socket),
    }
    for (var category in eventHandlers) {
        var handler = eventHandlers[category].handler;
        for (var event in handler) {
            socket.on(event, handler[event])
        }
    }
    app.allSockets.push(socket)
});

И в файле handShops.js:
var Shops = function (app, socket) {
    this.app = app,
    this.socket = socket,
    this.handler = {
        synchShopStatus: synchShopStatus.bind(this),
        ping: ping.bind(this)
    }
    function ping() {
        this.socket.emit('message', 'PONG!')
    }

    function synchShopStatus(text) {
        this.app.allSockets.emit('synchShopStatus', text);
    }
}

module.exports = Shops

Но он выдаёт ошибку: this.app.allSockets.emit is not a function
И не могу разобраться почему.
Или есть более лучший способ разделить события по файлам?
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Потому что allSockets это массив, нужно проходить его в цикле и уже вызывать сокет на элементе.

Экспортируйте socket туда где он необходим.
Почитайте про Dependency Injection в Node.js на Express.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы