Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
88 views
in Technique[技术] by (71.8m points)

node.js - Function is undefined when importing it

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.jstesting.jsdoSomething.jssocket.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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...