2014-12-30 50 views
1

我無法弄清楚如何在服務器端檢索查詢參數socket.io 1.2.1插槽IO 1.2查詢參數

這裏是我的客戶端代碼

var socket = io('http://localhost:3000/',{_query:"sid=" + $('#sid').attr('data-sid') + "&serial=" + $('#serial_tracker').text()}); 

和服務器側:

io.use(function(socket,next){ //find out if user is logged in 
     var handshake = socket.request; 
     console.log(socket.request._query); 
     handshake.sid = handshake.query.sid; 
} 

socket.request._query是:

{ EIO: '3', transport: 'polling', t: '1419909065555-0' } 

有誰知道查詢參數如何在套接字io 1.2.1中工作? 感謝您的幫助,如果您需要更多信息,只需問我。

回答

1

當發送握手查詢數據socket.io,在對象使用以下屬性名:

{ 
    query: 'token=12345' 
} 

我見上你的屬性名稱中使用_query代替。

您應該能夠在socket.request._query上訪問查詢信息。我不確定是否有更好的方法來獲得這些數據?我猜是的,因爲他們把一個下劃線放在它的前面,但我還沒有找到更好的方法。

下面是一個正在爲我工​​作的連接查詢的完整示例(原諒格式化,我將這個複製/粘貼到不同的節點模塊中嵌入到內聯解決方案中)。

服務器(使用插座1.2.1的NodeJS):(使用Chrome瀏覽器位於https://cdn.socket.io/socket.io-1.2.1.js客戶端庫)

var restify = require('restify'); 
var api = restify.createServer(); 
var socketio = require('socket.io'); 
var io = socketio.listen(api.server); // api is an instance of restify, listening on localhost:3000 
io.use(function(socket, next) { 
    // socket.request._query.token is accessible here, for me, and will be '12345' 
    next(); 
}); 
api.listen(3000, function() { 
    console.log('%s listening at %s', api.name, api.url); 
}); 

客戶:

var socket = io.connect('http://localhost:3000/', { query: 'token=12345' }); 
+0

當我嘗試這樣做,它甚至沒有連接。這就是爲什麼我將它改爲_query –

+0

有趣。我將用我正在使用的完整代碼更新我的答案。 – dvlsg