如何将所有 socket.io 分隔到不同的文件中

How to separate all of socket.io to a different file

提问人:FiFi 提问时间:4/12/2022 更新时间:4/12/2022 访问量:1191

问:

现在,我有应用程序.js我有我常用的代码和 socket.io 代码。但我想做的是,将 socket.io 的每个代码分成 1 个不同的文件,并要求将 socket.io 代码从不同的文件集成到我的主应用程序中.js。有没有办法将 2/3 行代码写入我的应用程序.js以要求从不同的文件 socket.io?

注意:我不想将我的任何 socket.io 代码写入我的应用程序中.js所以我不知道是否可以要求('....')它从其他文件.js到我的应用程序中。理想情况下,希望将io.on('connection'){}中的所有内容分开

const express = require('express');
const http = require('http');  // socket.io is created upon http server. A way to create server
const cors = require('cors');
const {Server} = require('socket.io');

const app = express();
app.use(cors());

const server = http.createServer(app);  // this is to create http server with express for socket.io
const io = new Server(server, {
    cors: {
        origin: "http://localhost:3000",
        methods: ["GET", "POST"]
    }
});

io.on("connection", (socket) => {
    socket.on("newUser", (username) => {
        addNewUser(username, socket.id);
        console.log('connect print: '); printUsers();
    })

    socket.on("disconnect", () => {
        removeUser(socket.id);
        console.log('disconnect print: '); printUsers();
    });
})

server.listen(3001, () => {
    console.log('server listening on port 3001');
})
JavaScript 节点.js ReactJS WebSocket socket.io

评论


答:

3赞 arfi720 4/12/2022 #1

有几种方法可以做到这一点,但下面这样的东西应该可以工作。

在新文件中,用于导出包含要导出的任何函数或对象的对象:module.exports

//socketio.js
module.exports = {
    getIo: (server) => {
        const io = new Server(server, {
            //...
        });
        io.on("connection", (socket) => {
          //...
        }
        //your other functions
        return io;
    }
}

然后在 app.js 中,需要它并使用对象的属性:

//app.js
const socketio = require('./socketio.js');

//after creating your server etc
const io = socketio.getIo(server);

评论

2赞 FiFi 4/12/2022
非常感谢arf。如果有人遇到或觉得这有帮助,请对答案投赞成票。我没有足够的名声来自己铸造它。
0赞 arfi720 4/12/2022
很高兴它有帮助,FiFi。如果是这样,您应该能够接受答案是正确的。谢谢!
0赞 FiFi 4/12/2022
做。再次感谢。你介意也看看这个吗?过得很艰难。stackoverflow.com/questions/71842932/......
0赞 El7or 7/28/2022
@arfi720 如何将getBroadcast()或getSocket()添加到此文件以访问它以执行如下操作:socket.broadcast.to('game').emit('message', 'nice game');