Question

J'utilise Socket.IO avec Node.js.

J'ai un socket objet qui ressemble à ceci:

SocketNamespace
    $events: Object
    ...
    socket: Socket

Alors si je regarde Socket (à savoir socket.socket)

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

Encore une fois, fonctionne très bien.

Mais si je veux juste revenir sessionid, donc j'utilise socket.socket.sessionid je reçois ...

undefined

Si je fais un typeof pour socket.socket je reçois object, mais pour socket.socket.sessionid, je viens d'obtenir undefined.


Modifier voici mon code:

Navigateur:

$(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) {

});

Modifier 2: Plus de données:

Au lieu de l'un journal, je l'ai remplacer par cela;

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

Renvoie:

object
object
undefined

attendu:

object
object
string

Edit 3: * Capture d'écran


Modifier 4

, curieusement, des œuvres.

var x;
for (x in socket.socket)
{
    if (x == 'sessionid') {
        console.log(socket.socket[x]);
    }
}
Était-ce utile?

La solution 2

Je ne peux pas le croire.

socket.socket['sessionid']

Cela a fonctionné. Merci à tous.

Autres conseils

socket.socket.sessionid est en effet valide et contient l'identifiant de session une fois qu'il est défini. Le problème est qu'il ne soit pas réglé au moment de l'impression à la console, puisque la prise n'a pas encore fait une connexion (et n'a donc pas un identifiant de session).

Modifier les lignes

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);
});

et tout devrait être d'or.

Je vais essayer d'expliquer pourquoi l'erreur est survenue en premier lieu.

Le TC, était à la recherche sur la console de dev Chrome et il montrait des données. Mais

console.log(typeof(socket));

et

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

ne pas produire une sortie égale.

Si vous regardez la console Chrome, vous verrez un petit symbole « i » près de l'objet.

Cela signifie que lorsque vous essayez d'accéder sessionid il n'a pas réellement. Essayez par exemple la propriété ouverte. Vous verrez qu'il montre quelque chose de différent de la sortie de l'objet.

Mais quand vous cliquez sur dans une console, il produit à la volée.

Si vous avez besoin d'un code de travail, il ressemble à ceci:

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

Maintenant, cela produira un sessionid valide sur un côté client.

Comme vous le voyez, dans votre exemple, vous essayez simplement d'accéder à une propriété non encore existante. Quelques millisecondes trop vite;)

J'espère que c'est clair maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top