在expressjs路由中而不是在主server.js文件中使用socket.io

在expressjs路由中而不是在主server.js文件中使用socket.io,第1张

在expressjs路由中而不是在主server.js文件中使用socket.io

io
与路由文件共享变量有多种方法。

  1. 当您

    require()
    在路由文件中时,将
    io
    变量作为构造函数参数传递给它。

  2. 使用

    app.set("io", io)
    ,然后可以
    let io = app.get("io")
    在可以访问该
    app
    对象的任何文件中使用。

  3. 创建一个将

    io
    对象放置在每个对象上的中间件,
    req
    以便您可以随时从那里访问它。


这是将其作为构造函数参数传递到路由器文件的示例

let server = app.listen(3000);let io = require('socket.io')(server);// load other routersapp.use(require("./someRouterFile.js")(io));// in someRouterFile.jsconst express = require('express');module.exports = function(io) {    let router = express.Router()    // define routes    // io is available in this scope    router.get(...)    return router;}

这是该

app.set()
方案的一个示例:

let server = app.listen(3000);let io = require('socket.io')(server);app.set("io", io);

然后,在您可以访问该

app
对象的路线中的任何位置,都可以使用以下方法获取它:

let io = app.get("io");

这是一个使用中间件将

io
对象设置到每个
req
对象上以便可以在所有路由中使用的示例。

let server = app.listen(3000);let io = require('socket.io')(server);// place this middleware before any other route definitions// makes io available as req.io in all request handlersapp.use(function(req, res, next) {    req.io = io;    next();});// then in any express route handler, you can use req.io.emit(...)

这是在不使用中间件的情况下对模块构造函数使用参数的示例:

// in mysocket.jsmodule.exports = (io) => {    console.log('IO: ', io);    io.on('connect', socket => {       // handle various socket connections here    });    // put any other pre that wants to use the io variable    // in here};

然后,在您的主文件中:

let server = app.listen(3000);let io = require('socket.io')(server);// initialize my socketio module and pass it the io instancerequire('./mysocket.js')(io);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4963586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存