在 io 侦听器之外修改 socket.data 属性 - socketio
modify socket.data attribute outside of io listener - socketio
所以我一直在创建一个简单的聊天应用程序,并且我使用的是更新的 socket.io 版本,特别是 socket.io@4.4.1,它可以访问 socket.data,这真的很有帮助,但我一直在尝试应用它。我查看了文档,但我发现的最好的是:
socket.data docs
代码布局是这样的:
function loginuser(socket, username,password){
if (authenticated()) {
socket.data.loggedin = true
}else{
console.log("fail")
}
}
而 io.on 是这样的:
io.on("connection", (socket) => {
socket.data.loggedin = false
socket.on('login', function(data) {
console.log("logged in?: "+ JSON.stringify(socket.data.loggedin))
if(!socket.data.loggedin){
loginuser(socket, data.username, data.password)
//should return true here afterwards in socket.data.loggedin, but it doesn't
}else{
console.log("logged in already")
}
});
所以我试图通过套接字,我 认为 这样我就可以更改它的所有部分,而不仅仅是功能。有没有人做过更简单的事情,甚至让我知道这是否可能?如果没有,还有哪些其他选择?
类似的内容可能适合您。
function loginuser(socket, username, password) {
if (authenticated()) {
return true;
}
return false;
}
io.on("connection", (socket) => {
socket.data.loggedin = false;
socket.on('login', function(data) {
if (socket.data.loggedin === false && (socket.data.loggedin = loginuser(socket, data.username, data.password)) === false) {
console.log("Failed to log in.");
} else {
console.log("The user is logged in.");
}
});
});
在上面的示例中,在新连接上,socket.data.loggedin
属性 的默认值为 false
。
如果套接字发出 login
事件,则执行以下操作:
- 检查
socket.data.loggedin
属性 的值是否等于 false
。如果它不等于 false
,我们跳转到 else
块,我们的用户已登录。如果条件是 false
,我们转到第二步。
- 我们将
socket.data.loggedin
属性的值赋值给loginuser
函数的return值,并检查新赋值是否等于false
.如果是false
,那么用户没有登录,也无法登录。如果新值为 true
,我们跳转到 else
块,因为我们的用户已成功登录。
所以我一直在创建一个简单的聊天应用程序,并且我使用的是更新的 socket.io 版本,特别是 socket.io@4.4.1,它可以访问 socket.data,这真的很有帮助,但我一直在尝试应用它。我查看了文档,但我发现的最好的是: socket.data docs
代码布局是这样的:
function loginuser(socket, username,password){
if (authenticated()) {
socket.data.loggedin = true
}else{
console.log("fail")
}
}
而 io.on 是这样的:
io.on("connection", (socket) => {
socket.data.loggedin = false
socket.on('login', function(data) {
console.log("logged in?: "+ JSON.stringify(socket.data.loggedin))
if(!socket.data.loggedin){
loginuser(socket, data.username, data.password)
//should return true here afterwards in socket.data.loggedin, but it doesn't
}else{
console.log("logged in already")
}
});
所以我试图通过套接字,我 认为 这样我就可以更改它的所有部分,而不仅仅是功能。有没有人做过更简单的事情,甚至让我知道这是否可能?如果没有,还有哪些其他选择?
类似的内容可能适合您。
function loginuser(socket, username, password) {
if (authenticated()) {
return true;
}
return false;
}
io.on("connection", (socket) => {
socket.data.loggedin = false;
socket.on('login', function(data) {
if (socket.data.loggedin === false && (socket.data.loggedin = loginuser(socket, data.username, data.password)) === false) {
console.log("Failed to log in.");
} else {
console.log("The user is logged in.");
}
});
});
在上面的示例中,在新连接上,socket.data.loggedin
属性 的默认值为 false
。
如果套接字发出 login
事件,则执行以下操作:
- 检查
socket.data.loggedin
属性 的值是否等于false
。如果它不等于false
,我们跳转到else
块,我们的用户已登录。如果条件是false
,我们转到第二步。 - 我们将
socket.data.loggedin
属性的值赋值给loginuser
函数的return值,并检查新赋值是否等于false
.如果是false
,那么用户没有登录,也无法登录。如果新值为true
,我们跳转到else
块,因为我们的用户已成功登录。