Я хочу использовать экземпляр сокета из нескольких файлов. Я написал код подключения сокета в файле 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.
Поскольку вы уже выяснили, как создать модуль, который экспортирует именованную функцию в 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();
Краткое объяснение: вы экспортируете объект с функциями в качестве свойств. Поэтому каждая функция может считаться членом вашего импортированного объекта.
test
ошибки не функция. Я также попробовал socket.test
который также не работал. И вы написали var socket = require('../api/sockets/socketCode.js')(io, socket);
Но предположим, если я хочу требовать его в любых файлах контроллера. У меня не было бы io
и socket
там.
test
функцию из файлаusers.js
?