我正在尝试在我的快速js应用程序(由express generator创建)中集成socket.io。
Here is the answer i've followed
但它没有奏效。
在bin/www
app.io = require('socket.io')();
app.io.attach(server);
当我使用app.use('/', index);
修改app.use('/', require('./routes/index')(app.io))
时;在app.js文件中我收到以下错误
*
Router.use需要中间件功能,但未定义
*
答案 0 :(得分:3)
以下是使用express实现socket.io的方法。
var express = require('express')
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
//serve static files and index.html
app.use(express.static(__dirname + '/'));
app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); });
io.on('connection', function(socket){
//logic handled in here
});
http.listen(7000,function(){ console.log('listening on port: 7000'); });
上面的代码有一条路径用于处理index.html的服务,但当然你可以使用与其他应用程序相同的方式扩展其他路由。
以下是如何在快速生成器中的路由中访问socket.io。
在www:
var server = http.createServer(app);
var io = require('socket.io')(server);
module.exports = {io:io}
在index.js
中router.get('/', function(req, res, next) {
var io = require('../bin/www')
console.log('I now have access to io', io)
res.render('index', { title: 'Express' });
});
注意,上面的示例纯粹向您展示了如何在index.js中访问io对象。有许多更好的方法来要求socket.io并传递io对象,但这些决定似乎超出了这个问题的范围。