Socket.IO和快递路线

时间:2014-07-08 11:27:11

标签: node.js sockets socket.io

我想使用socket.io和express路由,我有以下代码:

app.js

var
  http = require('http'),
  path = require('path'),
  passport = require('passport'),
  userpassport = require('./lib/strategies/local'),
  githubpassport = require('./lib/strategies/github'),
  flash = require('connect-flash'),
  express = require('express'),
  logger = require('morgan'),
  bodyParser = require('body-parser'),
  cookieParser = require('cookie-parser'),
  session = require('express-session'),
  errorhandler = require('errorhandler'),
  csrf = require('csurf'),
  favicon = require('serve-favicon'),
  sockets = require('./lib/socket'),
  app = express();

var routes = require('./routes')();
app.get('/', routes.index);

var server = http.createServer(app).listen(app.get('port'), function () {
  var io = require('socket.io')(server);

  io.on('connection', function (iosocket) {
    sockets.setSocket(iosocket);
  });
});

LIB / socket.js

var socket;
exports.setSocket = function(iosocket) {
  console.log('setting socket');
  socket = iosocket;
}

exports.getSocket = function() {
  console.log('getting socket');
  return socket;
}

路由/ index.js

var sockets = require('../lib/socket');
module.exports = function () {
  var routes = {};
  routes.index = function (req, res) {
  var socket = sockets.getSocket();
    socket.on('app/create', function (data) {
    console.log('got app create');
  });
}

这不起作用,我认为是因为app.js上显示的setSocket函数在页面加载后运行,因此当我{{1}时在路由上它不是最新的套接字(我可以在路由器上记录给定的套接字,我可以看到那里有一个套接字,但我也可以看到getSocket之后运行)。

我该如何解决这个问题?

0 个答案:

没有答案