io与路由文件共享变量有多种方法。
当您
require()
在路由文件中时,将io
变量作为构造函数参数传递给它。使用
app.set("io", io)
,然后可以let io = app.get("io")
在可以访问该app
对象的任何文件中使用。创建一个将
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);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)