我正在使用带有Node.js的Socket.IO。
我有一个对象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) {
});
应用:
console.log(typeof(socket));
console.log(typeof(socket.socket));
console.log(typeof(socket.socket.sessionid));
编辑2 :更多数据:
而不是一个日志,我已用此替换;
object
object
undefined
返回:
object
object
string
预期:
var x;
for (x in socket.socket)
{
if (x == 'sessionid') {
console.log(socket.socket[x]);
}
}
编辑3:* 屏幕截图
Screenshot of console http://f.cl.ly/items/1p423t0q3F3G1D2Z470W/sockets.png
编辑4
奇怪的是,这很有效。{{1}}
答案 0 :(得分:1)
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);
});
一切都应该是金色的。
答案 1 :(得分:0)
我无法相信。
socket.socket['sessionid']
那很有用。谢谢大家。
答案 2 :(得分:0)
我将首先尝试解释为何出现错误。
TC正在关注Chrome开发者控制台,它正在显示一些数据。 但是
console.log(typeof(socket));
和
console.log(typeof(socket.socket.sessionid));
不产生相同的输出。
如果您查看Chrome控制台,您会看到一个小小的" i"对象附近的符号。
这意味着,当您尝试访问sessionid时,它实际上并没有。 尝试例如开放财产。您将看到它显示与对象输出不同的内容。
但是当您在控制台中点击时,它会动态生成它。
如果您需要工作代码,它看起来像这样:
// 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
现在,这将在客户端生成有效的sessionid。
如您所见,在您的示例中,您只是尝试访问尚未存在的属性。 几毫秒太快;)
我希望现在很清楚。