2012-12-12 33 views
5

我對NodeJS開發很新穎。 我在我的快車應用程序中使用session.socket.io插件,但我在調試應用程序時遇到此錯誤「無法按鍵查找會話:connect.sid」,內部爲sessionSockets.on('connection',。 ..「無法按鍵查找會話:connect.sid」 - session.socket.io

這裏是整個app.js

var http = require('http'), 
    connect = require('express/node_modules/connect'), 
    express = require('express'), 
    app = express(); 

var cookieParser = express.cookieParser('Your secret key here'), 
    sessionStore = new connect.middleware.session.MemoryStore(); 

app.configure(function() { 
    app.set('port', process.env.PORT || 3000); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(cookieParser); 
    app.use(express.session({ 
     store: sessionStore 
    })); 
    app.use(app.router); 

}); 

var server = http.createServer(app), 
    io = require('socket.io').listen(server); 

var SessionSockets = require('session.socket.io'), 
    sessionSockets = new SessionSockets(io, sessionStore, cookieParser); 

app.configure('development', function() { 
    app.use(express.errorHandler()); 
}); 

app.get('/', function(req, res) { 
    res.end("Welcome to the API server"); 
}); 

sessionSockets.on('connection', function(err, socket, session) { 

    console.log('-----------------------'); 
    console.log(err.error); 
    console.log('-----------------------'); 

    socket.emit('welcome', { 
     msg: 'You\'re now listening to the api.' 

    }); 

}); 

server.listen(app.get('port'), function() { 
    console.log("Express server listening on port " + app.get('port')); 
}); 

客戶端:

<!DOCTYPE html> 

<head> 
    <meta charset="utf-8">  
    <title>Express+SocketIO testing</title> 
</head> 

<body> 

    <div id="responses"> 
     <h2>API responses:</h2> 
     <ul></ul> 
    </div> 

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>  
    <script src="http://localhost:3000/socket.io/socket.io.js"></script> 

    <script> 

     $(document).ready(function() { 

      var socket = io.connect('//localhost:3000'); 

      // Welcome message  
      socket.on('welcome', function(data) {  
       var li = '<li>Server said: ' + data.msg + '</li>';  
       $('#responses ul').append(li);  
      }); 
     }); 

    </script> 
</body> 
</html> 

的package.json

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app" 
    }, 
    "dependencies": { 
    "express": "3.0.3", 
    "socket.io":"*", 
    "session.socket.io":"*" 
    } 
} 

任何幫助或暗示的歡迎。謝謝。

+0

您可能需要包含您的客戶端代碼。服務器端部分在我的機器上正常工作。 –

+0

@HectorCorrea好的,我添加了一些更多的代碼給我的問題。 – jithujose

+2

我看到「無法通過鍵:connect.sid查找會話」錯誤的唯一方法是關閉服務器並重新啓動(當瀏覽器仍指向它時)。我懷疑(這是一個很長的一段時間),這是因爲當我關閉服務器時客戶端和服務器之間的前一個會話中斷了......但這只是一個猜測。 –

回答

1

當我使用Java socket.io客戶端時,發生了這種情況,因爲Java無法訪問node.js會話。

所以,我決定最好不要使用session.socket.io插件。可以與各種客戶端協同工作的更一般的解決方案是:將會話數據(或會話ID)發送到客戶端,可能通過將JavaScript片段插入到客戶端代碼中;然後讓客戶端將會話ID發送回服務器。

+0

請更新你的答案 – MrYoshiji

1

很多人都有同樣的錯誤,並有一個非常簡單的解決方案,根據this comment on Github。這僅僅是瀏覽到127.0.0.1與localhost的問題。

我希望這也能解決你的問題。

+0

我不認爲這是真正的問題,無論如何,上述代碼現在沒有任何特別的改變。 – jithujose