2012-01-12 14 views
1

Node.jsでSocket.IOを使用しています。それでは、私はSocket(すなわちsocket.socketJavaScriptオブジェクトの動作が混乱する

Socket 
    $events: Object 
    ... 
    sessionid: "1549988601982716407" 

は再び、正常に動作を見れば

SocketNamespace 
    $events: Object 
    ... 
    socket: Socket 

私はこのようになりますオブジェクトsocketを持っています。

しかし、私はちょうどsessionidを返すようにしたいので、私は私がobjectを得るsocket.socketためtypeofをすれば、私は私が手socket.socket.sessionid ...

undefined 

を使用していますが、socket.socket.sessionidのために、私はちょうどundefinedを取得する場合。


編集:ここは私のコードです:

ブラウザ:

$(function() { 

    $.getScript('http://localhost:8080/socket.io/socket.io.js', function() { 
     var socket = io.connect('http://localhost:8080'); 
     console.log(socket.socket.sessionid); 
    }); 

}); 

アプリケーション:

var io = require('socket.io').listen(8080); 

io.sockets.on('connection', function (socket) { 

}); 

編集2:その他のデータ:

1つのログの代わりに、これで置き換えます。

console.log(typeof(socket)); 
console.log(typeof(socket.socket)); 
console.log(typeof(socket.socket.sessionid)); 

戻り値:期待

object 
object 
undefined 

object 
object 
string 

編集3:*スクリーンショット

Screenshot of console http://f.cl.ly/items/1p423t0q3F3G1D2Z470W/sockets.png


編集4

これ、奇妙な、動作します。

var x; 
for (x in socket.socket) 
{ 
    if (x == 'sessionid') { 
     console.log(socket.socket[x]); 
    } 
} 
+4

*** ***は擬似コードを引用していません。あなたの問題はおそらくあなたが使用している*実際のコードになります。実際のコードを引用しないと、私たちはお手伝いできません。 –

+0

私はコードを追加しましたが、それは標準的なものですが、コードでページを埋める必要はありませんでした。 –

+0

元のサンプルでは 'sessionid'を参照していますが、編集したコードで' session_id'を挙げています。これが問題だろうか?それは 'sessionid'でしょうか? – Treffynnon

答えて

0

私はこれを信じることができません。

socket.socket['sessionid'] 

これはうまくいきました。皆さんありがとう。

1

socket.socket.sessionidは確かに有効であり、それはセットの後にセッションIDが含まれています。問題は、ソケットがまだ接続されていない(したがってセッションIDを持たない)ので、コンソールに出力した時点で設定されていないということです。

var socket = io.connect('http://localhost:8080'); 
socket.on('connect', function() { 
    console.log(socket.socket.sessionid); 
}); 

とすべてに

変更ライン

var socket = io.connect('http://localhost:8080'); 
console.log(socket.socket.sessionid); 

は黄金でなければなりません。

+0

悲しいことに私のために働いていない - まだ未定義を送信します。あなたの意見をお寄せいただきありがとうございます。 –

0

最初にエラーが発生した理由を説明しようとします。

TCは、Chromeデベロッパーコンソールを見ていて、いくつかのデータを表示していました。 しかし

console.log(typeof(socket)); 

console.log(typeof(socket.socket.sessionid)); 

は等しい出力を生成しません。

Chromeコンソールを見ると、オブジェクトの近くに小さな「i」という記号が表示されます。

これは、セッションIDにアクセスしようとすると、実際にはセッションIDにアクセスしないことを意味します。 オープンプロパティ。オブジェクトの出力とは異なるものが表示されます。

しかし、をクリックすると、がコンソールに表示され、オンザフライで生成されます。

あなたが作業コードが必要な場合、それは次のようになります。

// SERVER. Place it where you first _receive_ a connection from a client. 
socket.emit('connected'); 
// This will emit connected message. 
//It is a signal to your client, that there is an established CLIENT<->SERVER connetion 

// CLIENT 
socket.on('connected', function(){ 
console.log(socket.socket.sessionid);} // This produces correct sessionid 

さて、これはクライアント側で有効なセッションIDを生成します。

あなたの例では、まだ存在しないプロパティにアクセスしようとしています。 数ミリ秒が速すぎる;)

今はっきりしていることを願っています。

関連する問題