我试图使用会话中间件来连接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
任何帮助和输入都会很棒。谢谢你们。
答案 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()
方法。