问题描述
我和 redis 一起设置了 socket.io。在另一个文件 (doSomething.js
) 中,我尝试访问原始 io 变量以发出消息。 doSomething.js
在 testing.js
中被调用。而 socket.js
文件调用 testing.js
文件。
视觉效果:
socket.js
→ testing.js
→ doSomething.js
→ socket.js
当我尝试访问 doSomething.js
文件中的 testing.js
时,doSomething
未定义。
我认为这个问题被称为循环依赖......我尝试改变
module.exports = {} // original
module.exports.doSomething = doSomething // new way
但是还是不行。也许有一种不同的方式来设置和引用 socket.io? 我该如何解决这个问题?
完整代码:
index.js
require('./socket/socket').socketServer.create(server);
socket.js
const { testing } = require('../utilities/actions/testing');
testing();
const socketServer = {
_initialized: false,_IO: null,get IO() {
if (!socketServer._initialized) throw new Error('socketServer.create not called!');
return socketServer._IO;
},create: (server) => {
socketServer._IO = io(server,{ cors: { origin: '*' } });
const redisPort = config.get('redisPort');
const redisHost = config.get('redisHost');
const redisConnection = redisAdapter({ host: redisHost,port: redisPort });
socketServer._IO.adapter(redisConnection);
socketServer._IO.on('connection',(socket) => {
logger.debug('connected to socket.io');
});
socketServer._initialized = true;
},};
module.exports.socketServer = socketServer;
testing.js
const { doSomething } = require('../doSomething');
console.log(doSomething); // outputs undefined
function testing() {
console.log('asfasfas');
}
exports.testing = testing;
doSomething.js
const { socketServer } = require('../../socket/socket');
async function sendOfferToEmployees() {
const allSockets = socketServer.IO.adapter.nsp.sockets;
Object.keys(allSockets).map(async (socketId) => {
const currentSocket = allSockets[socketId];
try {
await socketServer.IO.adapter.remoteJoin(socketId,'cool-room');
currentSocket.emit('cool-event',{...personalizedData});
} catch (error) {
}
});
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)