Javascript Express 4将Socket.IO传递到Index.js

Javascript Express 4将Socket.IO传递到Index.js,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在尝试在路由中使用套接字io,但是我尝试的每个方法都会给我一个错误,或者返回index.js文件中未定义的app.io 下面给出了错误: var search = 1 + req.url.indexOf('?'); ^ TypeError: Cannot read property 'indexOf' of undefined 对于第行: app.use('/', require('./routes/index')(io)); bin

我正在尝试在路由中使用套接字io,但是我尝试的每个方法都会给我一个错误,或者返回index.js文件中未定义的app.io

下面给出了错误:

var search = 1 + req.url.indexOf('?');
                          ^

TypeError: Cannot read property 'indexOf' of undefined
对于第行:

app.use('/', require('./routes/index')(io));
bin/www

var app = require('../app');
app.io.attach(server);

//var io = app.io;
//io.attach(server);
Index.js

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


router.get('/', function(req, res, next) {
  res.render('index', {
    title: 'Home'      
  });
});

router.get('/getSubmit', function(req, res){;
    console.log("submitted");
});

module.exports = function(io) {
    var app = require('express');
    var router = app.Router();

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

    });

    return router;
};


module.exports = router;
app.js

var express = require('express');
var path = require('path');
var logger = require('morgan'); //logs information to terminal
var socket_io    = require( "socket.io" );


var app = express();
app.use(express.static(path.join(__dirname, 'public')));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));


var io           = socket_io();
app.io           = io;

app.use('/', require('./routes/index')(io)); //adding (io) or (app.io) gives the above error.

app.io.on('connection', function(socket){
  console.log("Socket.io connected"); //This works
});


module.exports = app;

由于Express 4中的更改:

var io           = socket_io();
app.io           = io;

app.set('socketio', io);
Index.js router.get

  router.get('/example', function(req, res){
    var socket = req.app.get('socketio');
    socket.emit('event', data);
   });