Frage

Ich verwende Socket.io mit node.js.

Ich habe ein Objekt socket was so aussieht:

SocketNamespace
    $events: Object
    ...
    socket: Socket

Also, wenn ich mir anschaue Socket (dh socket.socket)

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

Wieder funktioniert gut.

Aber wenn ich nur zurückkehren möchte sessionid, also benutze ich socket.socket.sessionid Ich bekomme...

undefined

Wenn ich a mache typeof zum socket.socket Ich bekomme object, aber für socket.socket.sessionid, Ich bekomme einfach undefined.


Bearbeiten: Hier ist mein Code:

Browser:

$(function() {

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

});

App:

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

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

});

Bearbeiten 2: Weitere Daten:

Anstelle des einen Protokolls habe ich dies ersetzt;

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

Kehrt zurück:

object
object
undefined

Erwartet:

object
object
string

Bearbeiten 3:* Bildschirmfoto

Screenshot of console


Bearbeiten 4

Dies funktioniert seltsamerweise.

var x;
for (x in socket.socket)
{
    if (x == 'sessionid') {
        console.log(socket.socket[x]);
    }
}
War es hilfreich?

Lösung 2

Ich kann das nicht glauben.

socket.socket['sessionid']

Das hat funktioniert. Vielen Dank an alle.

Andere Tipps

socket.socket.sessionid ist in der Tat gültig und enthält die Sitzungs -ID, sobald sie festgelegt ist. Das Problem ist, dass es in dem Moment, in dem Sie es in die Konsole drucken, nicht festgelegt ist, da der Socket noch keine Verbindung hergestellt hat (und daher keine Sitzungs -ID hat).

Ändern Sie die Linien

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

zu

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

Und alles sollte golden sein.

Ich werde versuchen zu erklären, warum der Fehler überhaupt aufgetreten ist.

Der TC schaute sich die Chrome Dev -Konsole an und zeigte einige Daten. Aber

console.log(typeof(socket));

und

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

unterlassen Sie erzeugen gleiche Ausgabe.

Wenn Sie sich die Chromkonsole ansehen, sehen Sie ein kleines "I" -Symbol in der Nähe des Objekts.

Dies bedeutet, dass wenn Sie versuchen, auf Sessionid zuzugreifen, es nicht hat. Versuchen Sie es mit offenem Eigentum. Sie werden sehen, dass es etwas anderes als die Objektausgabe zeigt.

Aber wenn du klicken In einer Konsole produziert es es im Fliegen.

Wenn Sie einen Arbeitscode benötigen, sieht dies so aus:

// 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

Dies erzeugt nun eine gültige Sitzung auf einer Client -Seite.

Wie Sie sehen, versuchen Sie in Ihrem Beispiel einfach, auf eine nicht vorhandene Eigenschaft zuzugreifen. Ein paar Millisekunden zu schnell;)

Ich hoffe das ist jetzt klar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top