传递Socket.IO实例以路由文件

时间:2019-01-30 06:01:29

标签: javascript node.js socket.io

我希望与我的快速路由文件共享一个socket.io实例。

我以前在一个路由文件中将socket.io侦听器放置在端口orders.js上的5200中,而快递服务器在端口app.js上的5000中侦听了,但是我的云服务需要我为两个端口都使用一个端口,因此我确实将它们都移动到了app.js。下面的代码已大大简化以消除噪声

./ app.js

const port = process.env.PORT || 8000;
const socket = require('socket.io');
const server = app.listen(port, () => console.log(`[!] Listening on 
port: ${chalk.green(port)}`))

const io = module.exports = socket(server);
app.use(express.json());
app.use(cors());
app.use('/', router)

./路线/索引

 const express = require('express');
 const router = express.Router();
 router.use('/orders', require('./orders'));

  module.exports = router;

./ routes / orders.js

 const express = require('express');
 const router = express.Router();
 const io = require('../index');


 io.on('connection', (client) => {
console.log("CLIENT CONNECTED");
 })

 router.get(... etc etc

我希望获得一个连接控制台,但是却收到一个错误消息,即IO不是功能。当我console.log(io)时我得到{}

1 个答案:

答案 0 :(得分:0)

尝试这种方式

const user = require('{SET FILE PATH}');

 io.on('connection', function (socket) {
  console.log('Socket connected...', socket.id);      

  socket.on('login', function (req) {
    user.login(socket, req, 'login'); // socketObj , req , methodName
  })
});

user.js

class User {

   login(socket, req, methodName) {
      console.log("Socket ref is ::: " , socket);
   }

}

module.exports = new User();