我正试图在路由中使用socket-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);
});