2016-04-09 3 views
0

Я пытаюсь использовать сокет io в своих маршрутах, однако каждый метод, который я попробовал, дает мне ошибку или возвращает app.io undefined в файле index.js.Экспресс 4 Передача Socket.IO в Index.js

Ниже дает мне ошибку:

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

TypeError: Cannot read property 'indexOf' of undefined 

для линии:

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

бен/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; 

ответ

0

Из-за изменений в 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); 
    }); 
Смежные вопросы