快递js中的Socket.io:Router.use需要中间件功能但未定义

时间:2017-04-18 15:04:54

标签: javascript node.js sockets express

我正在尝试在我的快速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需要中间件功能,但未定义

*

1 个答案:

答案 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对象,但这些决定似乎超出了这个问题的范围。