I set up socket.io together with redis. In a different file (doSomething.js
) I try accessing the original io variable to emit a message. doSomething.js
gets called in testing.js
. And socket.js
file calls the testing.js
file.
Visual:
socket.js
→ testing.js
→ doSomething.js
→ socket.js
When I try accessing doSomething.js
in the testing.js
file, doSomething
is undefined.
I think the issue is called a circular dependency... I tried changing
module.exports = {} // original
module.exports.doSomething = doSomething // new way
but it still didn't work. Maybe there's a different way of setting up and referencing socket.io?
How can I fix this issue?
Full code:
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) {
}
});
}
question from:
https://stackoverflow.com/questions/65929259/function-is-undefined-when-importing-it 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…