Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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 使用post with express:我想从用户那里接收数据,然后用新文件将数据发送回用户_Javascript_Jquery_Node.js_Sockets_Post - Fatal编程技术网

Javascript 使用post with express:我想从用户那里接收数据,然后用新文件将数据发送回用户

Javascript 使用post with express:我想从用户那里接收数据,然后用新文件将数据发送回用户,javascript,jquery,node.js,sockets,post,Javascript,Jquery,Node.js,Sockets,Post,我正在创建一个桌面纸牌游戏的node.js网页,我最初是在后端构建应用程序的,但一次只能处理一个游戏(因为我一次只测试一个)。现在,我正在整合前端,需要一次处理多个游戏的能力,我正在努力解决如何接收用户名和id代码,创建或加入特定游戏,同时在客户端记住玩家自己是谁: 早期算法: --具有全局变量player,并使用post req(通过express)更新用户输入的名称 --发送用户gameView.html文件 --从那里(客户端)const socket=io.connect(),socke

我正在创建一个桌面纸牌游戏的node.js网页,我最初是在后端构建应用程序的,但一次只能处理一个游戏(因为我一次只测试一个)。现在,我正在整合前端,需要一次处理多个游戏的能力,我正在努力解决如何接收用户名和id代码,创建或加入特定游戏,同时在客户端记住玩家自己是谁:

早期算法:

--具有全局变量player,并使用post req(通过express)更新用户输入的名称

--发送用户gameView.html文件

--从那里(客户端)const socket=io.connect(),socket.emit('newPlayer',socket.id)

--创建一个链接套接字id和全局变量player的player对象

--将全局播放器变量重置为“”

--继续等待其他玩家

显然,这是一种非常草率的做法,只用于开发后端。现在,我需要处理多个用户和游戏,我的算法(理想情况下)可以这样工作:

--用户通过prePlayView.html文件发布其姓名和id代码

--向用户发送gameView.html文件以及输入的名称和id(这是我不确定如何实现的部分,因为新文件发送后套接字id会更改,因此无法在服务器端跟踪)

--在客户端,const socket=io.connect(),socket.emit('newPlayer',name,id)

--如果id为空,则创建具有唯一id的游戏对象,并将其存储在具有密钥id的游戏字典中,然后添加玩家

有什么想法吗?我真的错过了什么吗?我是node.js的新手

以下是我当前的实现,以供参考:

var app = express();
app.set('port', 5000);
// called when a player enters the game
app.post("/userView.html", function(req, res) {
  var body = "";
  req.on('data', function(char) {
    body += char;
  });

  req.on('end', function () {
    var playerName = body.substr(body.indexOf("=") + 1, body.indexOf("&") - 4);
    var id = body.substr(body.indexOf("&") + 4, body.length);
    body = "";
    var options = {
      headers: {
        'id': id,
        'names': playerName
      }
    }
    res.sendFile(path.join(__dirname, 'userView.html'), options);

  });


我假设您正在使用套接字在服务器和客户端之间进行通信

没错,如果您想同时处理多个游戏,则不能在服务器上使用全局变量来存储当前注册用户的详细信息。使用这种策略,一次只能有一个玩家在服务器上注册

更好的策略是记住哪些客户机在过去连接到服务器,以及在他们发出请求时,仅在请求期间临时加载他们的信息,并且仅在服务器的express route处理程序的范围内

我很高兴向大家介绍这个概念。您可以使用它们来记住有关以前连接的客户端的信息。有一个中间件将会话添加到express中,称为。另外,假设您使用的是sockets.io,那么在上还有一个常见问题解答

我无法涵盖您在这里为了同时支持多个游戏而必须更改的架构的所有内容,但了解和利用会话是一种可能的途径。请慢慢来,一次咬一片。学习如何构建web应用程序来实现您的想象可能很困难,一次只关注一个步骤是必要的:)