【问题标题】:Using Socket IO with Express JS在 Express JS 中使用 Socket IO
【发布时间】:2016-05-03 19:59:10
【问题描述】:

(不熟悉节点。)

我使用express-generator 生成了我的express js 应用程序

所以文件结构是这样的

├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.jade
    ├── index.jade
    └── layout.jade

我想实现socket io。等等文件bin/www

我在server.listen(port);下面添加了这段代码

server.listen(port);
/**
 * Socket IO
 */
var io = require('socket.io')(server);

io.on('connection', function(socket){

  console.log('a user connected');
  console.log(socket.id);

  socket.on('disconnect', function(){
    console.log('user disconnected');
    console.log(socket.id);
  });

});

每次客户端连接时,它都会记录

连接的用户

现在我想使用他们的 socket.id 向特定用户发布更新

关于路线/index.js

var express = require('express');
var router  = express.Router();
var io      = require('socket.io');

/* GET home page. */
router.route('/')
    .get(function(req, res, next)
    {
        res.send('Nothing to do here');
    })
    .post(function(req, res, next)
        {
            var socketid = req.param('socketid');
            io.broadcast.to(id).emit('message', "Hello World");
        }
    );

module.exports = router;

现在每次我发帖。我收到一个错误

Cannot read property 'to' of undefined

好像我的 io 搞错了。

我是否还需要 index.js 中的服务器?

或者我如何使用在 www 中声明的一个 io var?这可能吗?只需使用现有对象即可

【问题讨论】:

    标签: ios node.js sockets


    【解决方案1】:

    您得到Cannot read property 'to' of undefined,因为您没有在routes\index.js 文件中定义io,并且您没有在bin/www 中引用io

    您可以通过将新的io 对象传递给路由文件来解决此问题。 例如

    bin/www

    server.listen(port);
    /**
      * Socket IO
    */
    var io = require('socket.io')(server);
    
    //remove same lines from app.js
    var routes = require('./router/index.js')(io);
    app.use('/', routes)
    
    io.on('connection', function(socket){
       console.log('a user connected');
       console.log(socket.id);
    
       socket.on('disconnect', function(){
          console.log('user disconnected');
          console.log(socket.id);
       });
    });
    

    路由器/index.js

    module.exports = function(io) {
       var express = require('express');
       var router  = express.Router();
    
       /* GET home page. */
       router.route('/').get(function(req, res, next){
          res.send('Nothing to do here');
       }).post(function(req, res, next){
            var socketid = req.param('socketid');
            io.broadcast.to(id).emit('message', "Hello World");
       });
       return router;
    }
    

    如果它不起作用,请告诉我。

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2015-03-06
      • 2014-10-18
      • 2021-03-17
      • 2013-10-05
      • 2021-06-05
      相关资源
      最近更新 更多