Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从同一用户分离多个socket.io连接_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript 从同一用户分离多个socket.io连接

Javascript 从同一用户分离多个socket.io连接,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我正在使用Node.js、Express和socket.io开发简单的web应用程序,这样一来,一个用户可以键入一些内容,另一个用户可以查看这些内容,而我真的无法使用socket.io 流程是,在登录后,用户将看到他的所有对话。他将能够点击编辑或查看对话。它将显示对话,他将键入的所有内容都将使用socket.io传输到服务器,然后再传输到单击“查看”的任何人 每个对话都有其ID,用户可以通过转到/:ID/查看查看该对话,并通过转到/:ID/编辑进行编辑。问题是,当用户打开几个对话进行编辑时,我不

我正在使用Node.js、Express和socket.io开发简单的web应用程序,这样一来,一个用户可以键入一些内容,另一个用户可以查看这些内容,而我真的无法使用socket.io

流程是,在登录后,用户将看到他的所有对话。他将能够点击编辑或查看对话。它将显示对话,他将键入的所有内容都将使用socket.io传输到服务器,然后再传输到单击“查看”的任何人

每个对话都有其ID,用户可以通过转到/:ID/查看查看该对话,并通过转到/:ID/编辑进行编辑。问题是,当用户打开几个对话进行编辑时,我不知道如何将它们分开。我有以下代码:

app.get("/:id/edit", function(req, res) {
    res.render('editing');
});
问题是,我不知道当socket.io在io.onconnection中连接时,如何判断它属于哪个会话id。我原以为我会使用会话来保存打开的会话的ID,但问题是当用户同时打开两个会话时——不可能将它们分开。我提出的另一个解决方案是将res.render中的会话ID呈现为javascript—类似于:

<html>
...
<body>
...
<script>
  var socket = io();
  socket.emit("conversation_id", "{% ID %}");
  ...
</script>
</body>
</html>

谢谢

为什么会有安全问题?你不能检查一个用户是否被允许输入他给你的id的对话吗?顺便说一句,我的方法是将对话id传递到页面,让页面通过其id请求对话,并检查用户是否有权输入该对话。是的,如果我使用socket.io和passportjs的集成,我将能够查询数据库,并检查用户是否拥有他所请求的文档的权限,所以您是对的。不过,将ID呈现给用户以便他可以将其发送给我,这看起来并不是一个好的解决方案。此外,模板引擎主要用于呈现HTML,我想,我不想将某些内容呈现为javascript。如何在客户端解析当前URL,提取id,并使用它进行连接?我可能会按照第二条评论中的建议使用呈现为javascript,但无论如何还是要感谢。
app.get("/:id/edit", function(req, res) {
    res.render('editing');
    var socket = socket_from_socketio_that_connects_because_of_this;
    socket.on("type", function (data) {
        objects[req.params.id].text.push(data);
    });
});