在Express JS中使用Socket IO

片段

(不熟悉节点。)

我使用生成了我的expressjs应用express-generator

所以文件结构看起来像这样

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

我想实现套接字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向特定用户发布更新

在routes / 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?这可能吗?只使用现有的对象

穆克什·沙玛(Mukesh Sharma)

您正在得到Cannot read property 'to' of undefined,因为您尚未ioroutes\index.jsfile中定义并且您没有对ioin进行引用bin/www

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

斌/ 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;
}

让我知道,如果它不起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章