2017-07-25 150 views
0

我試着去使用會話中間件連接快遞和socket.io插座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容器,並安裝了默認的軟件包來處理堆棧,我試圖更新節點和npm並表達。但是林不知道,如果他們到最新版本

這裏是我所得到的,當我調用校驗節點版本

node: 4.7.3 
npm: 2.15.11 
yarn: not installed 

快遞版本3.6.2

任何幫助和輸入會很好。多謝你們。

+0

注意:socket.io版本:0.9.19 –

+0

嘗試'var io = require('socket.io')(server);' – Ikbel

+0

哦,非常感謝!它沒有工作,然後我試圖做npm安裝[email protected]它修復了它!但是現在我擔心我的節點版本不是最新的版本,我試着運行sudo n stable,但它仍然給我節點版本4?我如何解決這個問題? –

回答

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目標ct(socket.io服務器的一個實例)。然後單獨啓動服務器,以便它可以用於您的http請求和您的socket.io請求。

你這樣做的方式,socketio不是正確的一種對象,要打.listen()。這是模塊句柄而不是實例,因此io是錯誤的對象類型,因此爲什麼沒有.use()方法。