我有以下代码结构:
/app.js
var user = require('./server/routes/api/user');
var io = require('socket.io').listen(server);
require('./server/sockets/base')(io);
我知道我可以通过以下方式发布事件(测试和工作)
io.to("someroom").emit("news", "news");
问题是,我希望能够从我的路径文件中发出事件,该路径文件无法访问io对象。
/routes/api/user.js
router.post('/login', function(req, res){
// HERE I WANT TO EMIT THE EVENT BY USING io.to("someroom").emit("news", "news");
// I TRIED req.socket.emit('news', { hello: 'world' }); without luck
}
使用此文件夹结构发出最简单的方法是什么?
答案 0 :(得分:2)
您的路线需要io
对象,因此您必须将其作为参数传递。
在user.js中:
module.exports = function (io) {
// all of this router's configurations
router.post('/login', function (req, res, next) {
io.to('someroom').emit('news', 'news');
});
return router;
}
使用路线时,请提及io
:
app.use(..., user(io));
答案 1 :(得分:0)
只需导出套接字并在要使用它的任何文件中使用它。
<强> /socket.js 强>
var server = require('./app.js');
var io = require('socket.io').listen(server);
module.exports = io;
<强> /app.js 强>
module.exports = server;
var user = require('./server/routes/api/user');
var io = require('./socket.js');
require('./server/sockets/base')(io);
<强> /routes/api/user.js 强>
var io = require('../../../socket.js');
router.post('/login', function(req, res){
io.to("someroom").emit("news", "news");
}
答案 2 :(得分:0)
const io = require('socket.io').listen(server);
app.set('io', io);
然后在路由器中
router.get('/', (req, res) => {
req.app.get('io').to('someroom').emit('news', 'news');
});