Как поделиться экземпляром сокета над несколькими файлами?

1

Я хочу использовать экземпляр сокета из нескольких файлов. Я написал код подключения сокета в файле App.js. Что выглядит следующим образом

var socketCode = require('../api/sockets/socketCode.js');

var io = require('socket.io')(server);
io.on('connection', function(socket) {
  socketCode(io, socket);
}

Теперь мой файл socketCode.js выглядит следующим образом

module.exports = (io, socket) => {
  test: function(data) {
    console.log("io", io, "\n", "socket", socket)
    return io;
  }
}

Теперь я хочу вызвать функцию test из другого файла, скажем, из user.js

Мой user.js выглядит так:

var socketCode = require('../api/sockets/socketCode.js')();
console.log(socketCode.test);

Цель состоит в том, чтобы сохранить отдельный код и контроллеры сокетов и другой код. Всякий раз, когда я хочу выпустить какое-либо событие/сообщение от контроллера. Я просто хочу вызвать функцию внутри socetCode.js которая должна испускать событие сокета.

Как я могу назвать test на жизнь внутри socketCode.js файла из user.js. и он должен печатать /log io объект.

Я не смог найти правильную файловую структуру вместе с сокетом. Я использую express js.

  • 0
    Вы не выразили, какова ваша настоящая проблема / вопрос?
  • 0
    Как вызвать test функцию из файла users.js ?
Теги:
websocket
socket.io

1 ответ

0
Лучший ответ

Поскольку вы уже выяснили, как создать модуль, который экспортирует именованную функцию в socketCode.js:

module.exports = (io, socket) => {
  test: function(data) {
    console.log("io", io, "\n", "socket", socket)
    return io;
  }
}

Вам просто нужно будет импортировать этот модуль в другое место:

var io = "your io object";
var socket = "your socket object";
var socket = require('../api/sockets/socketCode.js')(io, socket);
socket.test();

Краткое объяснение: вы экспортируете объект с функциями в качестве свойств. Поэтому каждая функция может считаться членом вашего импортированного объекта.

  • 0
    Я пытался, это не работает. Выдает test ошибки не функция. Я также попробовал socket.test который также не работал. И вы написали var socket = require('../api/sockets/socketCode.js')(io, socket); Но предположим, если я хочу требовать его в любых файлах контроллера. У меня не было бы io и socket там.
  • 0
    @MalikLakhani Извините, ваш модуль ожидает два параметра (io и socket), которые вы должны передать в него. Я обновил свой ответ
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню