socketio nodejs, возвращающий неопределенный при импорте - PullRequest
0 голосов
/ 25 августа 2018

Я создавал приложение в течение нескольких месяцев, и я взломал способ, чтобы мой экземпляр socket.io был разделен между несколькими модулями, где это требуется.Метод, которым я пользуюсь, чтобы поделиться им, был непоследователен, и на трехдневных выходных я хотел реорганизовать его в более элегантный подход.После поиска SO в течение последних нескольких дней и попыток использовать другие методы обмена данными, у меня закончились идеи.

Я создал новый файл NodeJs "debug.js", и в нем я импортирую экземпляр socket.io, который был успешно использован совместно с моими конечными точками основного сокета и другим файлом.В этом файле я делаю две простые вещи.1. Я делаю эмитт, который никогда не принимается на стороне клиента.2. Я пытаюсь записать значение 'io' в вызов функции, которая никогда не срабатывает.

debug.js

 const io = require('./../main/index.js');

io.emit('test');
function test() {
    console.log('io logged')
    console.log(io);
}
test();

io.on('debug', function(socket){
    console.log('test')
})

Из того, что я читал о загрузке и кэшировании в узле, я думаю, что этот модуль даже не работает.А в других случаях, таких как

sockets.js

var sockets;
module.exports = {
  start: function (io) {
      sockets = io;
    io.on('connection', function (socket) {
      this.io = socket;
      socket.on('validatePlaceAction', function (data) {
        //do stuff and things
      });

    }.bind(this));
},
io: null
}

, иногда возможность совместно использовать io через свойство 'io', а иногда нет, связана с тем, как файлызагружен.Моя конечная цель состоит в том, чтобы иметь согласованный способ отправки событий socketio для предоставления обновлений в реальном времени моему клиенту, в приведенном выше примере «validatePlaceAction» возвращает логическое значение, определяющее, будет ли клиент загружать событие, или событие onclick будет вспыхивать.

index.js

const http = require('http');
const app = require('./server/routes.js');
const server = app.listen(8080, function () { console.log('port 8080 is live!'); });
const socketio = require('socket.io');
const io = require('./server/sockets');

let sockets = socketio.listen(server);
const socket = io.start(sockets);

io.start передает экземпляр сокета в свойство, которое затем имеет всю логику сокета, которая выглядит не совсем правильно.Главным образом потому, что я не могу повернуться и поделиться этой логикой с другими файлами.Кажется, я что-то упускаю в этом, но методом проб и ошибок не ясно, что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...