栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号