2016-04-09 65 views
0

我試圖能夠在我的路由中使用套接字io,但是我嘗試過的每種方法都給了我一個錯誤,或者返回了index.js文件中的app.io undefined。Express 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

由於快遞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); 
    }); 
相關問題