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

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

现在,我有 app.js,其中有我的常用代码和我的 socket.io 代码。但我想做的是,将 socket.io 的每个代码分成 1 个不同的文件,并要求将来自不同文件的 socket.io 代码放入我的主 app.js 中。有什么办法可以将 2/3 行代码写入我的 app.js 以从不同的文件中获取 socket.io?

注意:我不想将我的任何 socket.io 代码写入我的 app.js 所以我不知道是否可以 require('....') 它从另一个文件进入我的app.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');
})

有几种方法可以做到这一点,但像下面这样的方法应该可行。

在您的新文件中,使用 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);