質問

socket.ioを使用してnode.jsを使用しています。

オブジェクトがあります socket これは次のようになります:

SocketNamespace
    $events: Object
    ...
    socket: Socket

だから私が見たら Socket (すなわち socket.socket)

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

繰り返しますが、正常に機能します。

しかし、私がただ戻りたいなら sessionid, 、だから私は使用します socket.socket.sessionid わかります...

undefined

私がする場合 typeof 為に socket.socket 私は得ます object, 、しかし 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


編集4

奇妙なことに、これはうまくいきます。

var x;
for (x in socket.socket)
{
    if (x == 'sessionid') {
        console.log(socket.socket[x]);
    }
}
役に立ちましたか?

解決 2

私はこれを信じられません。

socket.socket['sessionid']

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

他のヒント

socket.socket.sessionid 確かに有効であり、セットが設定されるとセッションIDが含まれます。問題は、ソケットがまだ接続していないため(したがってセッションIDがないため)、コンソールに印刷する瞬間に設定されていないことです。

行を変更します

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

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

そして、すべてが黄金であるべきです。

そもそもエラーが発生した理由を説明しようとします。

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

console.log(typeof(socket));

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

しない 等しい出力を生成します。

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

これは、SessionIDにアクセスしようとすると、実際にはそれがないことを意味します。オープンプロパティでEGを試してください。オブジェクトの出力とは異なるものを示していることがわかります。

しかし、あなたがいつ クリック コンソールで、その場で生成します。

動作コードが必要な場合は、次のようになります。

// 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が生成されます。

ご覧のとおり、例では、既存のプロパティではないプロパティにアクセスしようとします。数ミリ秒が速すぎる;)

私はそれが今明確であることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top