【问题标题】:ExpressJS + Socket.IO RoutingExpressJS + Socket.IO 路由
【发布时间】:2016-01-10 18:59:20
【问题描述】:

重复的问题,但我没有找到完美的答案作为解决方案。请帮我解决这个问题。

我的 App.js

   var routes = require('./routes/index');
   var users = require('./routes/users');
   var media = require('./routes/media');
   var widget = require('./routes/widget');
   var display = require('./routes/displays');
   var device = require('./routes/deviceinfo');

   app.use('/', routes);
   app.use('/display', display);


   var server = http.createServer(app);
   var io = require('socket.io')(server);
   io.set('transports', ['polling', 'websocket']);

显示路线:“routes/display.js”

我有插入显示的代码,一旦创建显示,就会向设备列表发出一个事件。

Emit 需要写在保存成功回调方法中。

      var express = require('express');
      var router = express.Router(); 
      router.post('/save', action_save_displays);
      function action_save_displays(req, res){
        display.save(req,body , function(err , display){
               if(!err){
                res.json(display);
                 //io.sockets.emit("displaycreated", display);
              }
        })
      }
       module.exports = routes;

如何在 routes/display.js 文件中传递 io.sockets.emit。非常感谢您的指导。如何将套接字对象发送到路由以启用发出事件。

【问题讨论】:

    标签: node.js routes socket.io emit


    【解决方案1】:

    您可以稍微交换一下需求,然后将 socket.io 传递给 display.js 文件

    var routes  = require('./routes/index');
    var users   = require('./routes/users');
    var media   = require('./routes/media');
    var widget  = require('./routes/widget');
    
    var server  = http.createServer(app);
    var io      = require('socket.io')(server);
    var display = require('./routes/displays')(io); // here
    
    var device  = require('./routes/deviceinfo');
    
    app.use('/', routes);
    app.use('/display', display);
    
    io.set('transports', ['polling', 'websocket']);
    

    并在display.js 文件中获取它

     var express = require('express');
     var router = express.Router(); 
    
     module.exports = function(io) {
    
         router.post('/save', function(req, res) {
             display.save(req.body , function(err, display){
                 if(!err){
                     res.json(display);
                     io.sockets.emit("displaycreated", display);
                  }
             });
         });
    
        return router;
    }
    

    【讨论】:

    • 您好 adeneo,添加上述代码后,我在 app.use 遇到问题。
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多