使用带有快递的帖子:我想从用户那里接收数据,然后用新文件将该数据发送回用户
Posted
技术标签:
【中文标题】使用带有快递的帖子:我想从用户那里接收数据,然后用新文件将该数据发送回用户【英文标题】:Using post with express: I want to receive data from the user and then send that data back to the user with a new file 【发布时间】:2021-01-30 09:47:47 【问题描述】:我正在创建一个桌面纸牌游戏的 node.js 网页,我最初在后端构建了应用程序,但一次只能处理一个游戏(因为我一次只测试一个)。既然我正在合并前端,并且需要一次处理多个游戏的能力,我正在努力解决如何接收用户的姓名和 ID 代码并创建或加入特定游戏,同时仍然记住客户端玩家自己是谁:
早期算法:
--拥有全局变量 player 并使用 post req (通过 express) 更新到用户输入的名称。
--发送用户gameView.html文件
--从那里(客户端) const socket = io.connect(), socket.emit('newPlayer', socket.id)
--创建一个连接socket id和全局变量player的播放器对象
--将全局播放器变量重置为“”
--继续等待其他玩家
显然这是一种非常草率的做法,仅用于后端的开发。现在我需要处理多个用户和游戏,我的算法(理想情况下)可以这样工作:
--用户通过 prePlayView.html 文件发布他们的姓名和 id 代码
--向用户发送 gameView.html 文件以及输入的名称和 ID(这是我不确定如何实现的部分,因为在发送新文件后套接字 ID 会更改,因此无法跟踪服务器端)
--在客户端,const socket = io.connect(), socket.emit('newPlayer', name, id);
--如果 id 为空,则创建具有唯一 id 的游戏对象并存储在具有 key 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);
);
【问题讨论】:
【参考方案1】:我将假设您使用套接字在服务器和客户端之间进行通信。
你是对的,如果你想一次处理多个游戏,你不能在你的服务器上使用一个全局变量来存储当前注册用户的详细信息。使用这种策略,一次只有一个玩家可以在服务器上注册。
更好的策略是记住过去有哪些客户端连接到服务器,以及当他们发出请求时,仅在请求期间临时加载他们的信息,并且仅在服务器的快递范围内路由处理程序。
很高兴向您介绍sessions 的概念。您可以使用它们来记住有关先前连接的客户端的信息。有一个中间件可以添加会话来表达,称为express-sessions。此外,假设您使用的是 sockets.io,using socket.io with express-session 上还有一个常见问题解答。
我无法涵盖所有内容,您必须在此处更改架构以同时支持多个游戏,但学习和利用会话是一种可能的途径。请慢慢来,一次咬下一块。学习如何构建网络应用程序来完成您的想象可能很困难,一次只关注一个步骤是必要的:)
【讨论】:
以上是关于使用带有快递的帖子:我想从用户那里接收数据,然后用新文件将该数据发送回用户的主要内容,如果未能解决你的问题,请参考以下文章
如何从 mysql 获取数据到 ckeditor textarea?