socket io .use()不是函数

时间:2017-07-25 03:30:56

标签: javascript node.js express socket.io

我试图使用会话中间件来连接express和socket.io

但是我收到了这个错误:

io.use(function(socket, next){
^

TypeError: io.use is not a function
at Object.<anonymous> (/home/ubuntu/workspace/newserver.js:30:4)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:990:3

这是我的代码:

var http = require('http');
var path = require('path');

var async = require('async');
var express = require('express');
var socketio = require('socket.io');
var sessions = require('express-session');
var mysql = require('mysql');
var RedisStore = require('connect-redis')(sessions);
var bodyParser = require('body-parser');

// App declaration
var router = express();
var server = http.createServer(router);

var io = socketio.listen(server);
io.set('log level',0);
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({extended:true}));



var sessionMiddleware = sessions({
    store: new RedisStore({}),
    secret: '901uj0394-0i4-#',
    resave:true,
    saveUninitialized:true
});


router.use(sessionMiddleware);




var session;

var appConfig = {
    title: 'The Warring States 2'
};

router.set('views', path.resolve(__dirname,'client/views'));
router.set('view engine', 'pug');

var connection = mysql.createConnection({
    // SQL Information
        host: 'localhost',
        user: 'boyton',
        password: '',
        database: 'WarringStates'
});

connection.connect(function(error){
    // callback
    if(!!error) {
        console.log('Error!');
        console.log(error);
    }
    else {
        console.log('Connected to the database');
    }
});


// Socket
var sockets = [];
var gamelobbies = [];

我只是从节点和表达开始,我为节点创建了一个c9容器并安装了默认的Packages来处理堆栈,我已经“尝试”更新节点和npm并表达了。但是我不确定他们是否符合最新版本

这是我在调用check-node-versions

时得到的
node: 4.7.3
npm: 2.15.11
yarn: not installed

表达版本3.6.2

任何帮助和输入都会很棒。谢谢你们。

1 个答案:

答案 0 :(得分:2)

更改此行:

var io = socketio.listen(server);

到此:

// create an instance of socket.io, bound to our web werver
var io = socketio(server);

然后确保你有这个地方:

// start the web server
server.listen(80);

socketio库是一个构造函数,它希望您调用它并将其传递给服务器以创建io对象(socket.io服务器的一个实例)。然后,您可以单独启动服务器,以便它可以用于您的http请求和socket.io请求。

你这样做的方式,socketio不是调用.listen()的正确对象。它是模块句柄而不是实例,因此io是错误的对象类型,因此没有.use()方法。