【问题标题】:Emit socket from a controller - How to get access to socket server from a controller从控制器发出套接字 - 如何从控制器访问套接字服务器
【发布时间】:2017-08-09 23:48:56
【问题描述】:

基地

我正在尝试在我的节点项目中使用套接字。这就是它的基本工作原理:

/
  |-> controllers/
  |  |-> home.js
  |-> app.js
  |-> sockets.js

/app.js

在应用程序上,我调用 sockets.js 来启动套接字服务器:

var express         = require('express');
var sockets         = require('./sockets');

var app = module.exports = express();

var server = app.listen(config.PORT);
var io = sockets(server);

/sockets.js

在这个文件上,我启动了套接字服务器,然后返回 io。

var socket          = require('socket.io');

module.exports = function(server) {
  var io = socket.listen(server);

  io.sockets.on('connection', function(socket) {
     // Here I can call every socket I want (if I have the socket_id) with this code : 
     var socket = io.to(socket_id);
     socket.emit('message', {});
  });

  return io;
};

问题

但是现在,我想在我的家庭控制器上检索我的 io 服务器并调用一个特定的套接字。我试过这样做:

/controller/home.js

var io  = require('../sockets.js');

module.exports = {
  home: function(req, res, next) {
    var socket = io.to(socket_id);
    socket.emit('message', {});
  }
};

但是我有这个错误,因为我没有执行这个函数(但我不想在这里创建一个新的套接字服务器):

TypeError: Object function (server) {
  var io = socket.listen(server);
  /*.....*/
  return io;
} has no method 'to'

我想访问这个在 app.js 上调用的函数返回的 io 变量。我怎样才能得到它?

【问题讨论】:

  • 您是否在您的app.js 中使用home.js 控制器?
  • 是的,当用户请求/时,我的路由器会调用home.js

标签: javascript node.js sockets socket.io


【解决方案1】:

您可以将sockets.js 转换为公开io 属性的对象。您还可以添加一个函数listen,app.js 在初始化期间调用该函数。

// sockets.js

module.exports = {
    listen: function(server) {
        this.io = socket.listen(server);
        //...
        return this.io; 
    }
}

然后您的控制器可以访问require('../sockets.js').io,您只需要确保在使用它时定义了io,否则请确保app.js 在调用您的控制器之前调用listen

【讨论】:

    【解决方案2】:

    您必须将 sockets.js 转换为公开您的 io 属性的对象。 您还可以添加一个函数监听 app.js 在初始化期间调用。

    然后您的控制器可以访问 require('../sockets.js').io。

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多