【问题标题】:Create a sharable URL for a room NodeJS + Socketio为房间创建一个可共享的 URL NodeJS + Socketio
【发布时间】:2022-02-11 18:31:58
【问题描述】:

我正在创建一个大厅,它应该将用户重定向到带有诸如 site.com/1234 之类的 URL 的游戏房间,其中 1234 是使用 Node.js 的房间代码和 Socket.io。我已经到了当用户按下按钮时向服务器发送请求以连接到具有随机房间代码的房间的步骤。然后应该发回一条包含 url 的消息,以便我可以做window.location = url。这应该会产生正确的链接并将用户发送到新的 HTML 文件。

我现在遇到的问题是,我不知道如何生成这样的 url 或在请求获得批准后如何显示下一个 html 页面。我看到有人说我可以做到app.get("/:gameID"),但我缺乏正确实施它的知识。

我看过其他一些帖子询问这个问题,但答案要么非常模糊,要么使用了一些框架。如果有人能将我推向正确的方向,我将不胜感激。

【问题讨论】:

    标签: html node.js url socket.io


    【解决方案1】:

    我是怎么做到的,就像你说的,设置一个允许你有参数的路由

    app.get('/chat/:id', function(req,res){
        res.sendFile('./public/chat/chat.html', { root: __dirname });
    });
    

    然后是客户端,修剪 url 并使用 socket.io 发出房间

    let t = window.location.href.substring(window.location.href.lastIndexOf("/") + 1)
    // on connection, tries to login to the chat with the chat ID made
    socket.on('connect', function(){
      socket.emit('loginchat', {id: t});
    });
    

    再次服务器端:

       socket.on('loginchat', async function(data){
          socket.room = data.id;
          //console.log(socket.room)
          socket.join(data.id);
       });
    

    所以当用户使用参数访问 /chat 路由时,服务器将访问它,并将它们发送到适当的房间。

    我写的有点快,所以对于任何令人困惑的部分表示歉意,如果你卡在其中的一部分,请告诉我:)

    【讨论】:

    • 感谢您的回答!我已经阅读了更多内容,我想知道您是否有目的从客户端发送代码,而不是在 app.get 函数中执行 const roomID = req.params.roomID; (第二个代码块)?
    • 另外,您知道我是否可以将 socket.on() 等放在 app.get 函数中吗?我觉得它看起来更整洁,但我不确定它是否违反编码标准,或者它是否会搞砸一切
    • 我不确定您所说的“从客户端发送代码”是什么意思,但是在回答您的第二个问题时,您可以在路由之前设置 io,所以对我来说,让 io = socket(server) 在 /chat 路由之上,所以如果一次连接的客户端太多,我可以阻止访问,如果在路由之前定义 io,则可以访问它。这是否意味着你需要做 io.on 然后 socket.on 我不确定
    • 啊,我的意思是房间ID,但现在我想这两个似乎都很好。感谢您的回复:D
    • 别担心,我很高兴我的旧代码对你有用:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多