为啥在使用 PostgreSQL local、ngrok 和 NodeJS 时程序会混合所有连接用户的代码?

Posted

技术标签:

【中文标题】为啥在使用 PostgreSQL local、ngrok 和 NodeJS 时程序会混合所有连接用户的代码?【英文标题】:Why the program mixes the code of all users connected when working with PostgreSQL local, ngrok and NodeJS?为什么在使用 PostgreSQL local、ngrok 和 NodeJS 时程序会混合所有连接用户的代码? 【发布时间】:2018-01-26 00:03:30 【问题描述】:

我的代码存在严重问题。我正在使用 Node.JS 和 ExpressJS 为 Telegram 开发一个机器人。为了提出请求,我使用 ngrok 并存储信息 PostgreSQL。我的问题是:当只有一个用户连接并与机器人对话和处理操作运行程序时,代码运行得很好。但是,当同时连接多个用户时,程序会为所有用户混合代码。示例:

如果第一个用户激活布尔变量以进行特定选择,或者如果机器人正在处理该用户的 SQL 查询并显示结果,则第二个和第三个用户会受到影响......为什么?

我认为可能 PostgreSQL 不允许在本地机器上运行数据库的多个事务,或者可能是代码有问题。

我该如何解决这个问题?

【问题讨论】:

See How do I ask a good question? - 如果你能提出一个清晰、简洁、包含相关代码的问题,你会得到更好的回应。 【参考方案1】:

听起来您正在使用可变服务器端。由于您没有提供代码,我将提供一个示例来说明我认为问题所在。

假设您有一个名为basket 的变量,它存储用户购物篮中的所有商品。当用户 A 将某物放入他们的购物篮时,您会更新该变量,但当用户 B 将某物放入他们的篮子时,您会更新相同的变量。

相反,您需要像这样创建一个用户对象:

let users = 
  "5": 
    userid: 5,
    basket: ['apple', 'banana']
  ,
  "7": 
    userid: 7,
    basket: ['orange', 'apple']
  

当您向后端发出请求时,您会在请求中传递 ID 和新项目(通常是 POST 正文)并获取正确的用户,如下所示:

let user = users[param.userid]
user.basket.push(item)

然后每个用户将单独更新。

【讨论】:

以上是关于为啥在使用 PostgreSQL local、ngrok 和 NodeJS 时程序会混合所有连接用户的代码?的主要内容,如果未能解决你的问题,请参考以下文章

为啥此查询在 PostgreSQL 中不使用仅索引扫描?

为啥 ng-click 需要通过 $index 跟踪才能在嵌套的 ng-repeat 内触发

为啥我们在 AngularJS 中使用 ng-style 而不是 style 进行 css 格式化?

为啥即使使用仅索引扫描 PostgresQL 计数也如此缓慢

为啥在 ng-repeat 列表中 unshift() 而不是 shift() 会发生 CSS 转换?

为啥 PostgreSQL 不使用三元索引