【问题标题】:Fast http requests to postgres results in different responses对 postgres 的快速 http 请求会导致不同的响应
【发布时间】:2016-09-19 03:35:16
【问题描述】:

我正在尝试使用带有 pg 包和角度的 nodejs 从 postgres 数据库中获取数据。

当我对数据库进行足够快的调用(两次或多次)时,每次连续响应都会得到混乱的结果(有些是两倍、三倍……)。

angular 的调用是最简单的

$http({
  url: "/db?table=appointments&type=perDoctor",
  method: "POST"
}).then(...);

和一个节点端(通过护照和快递)

var pg = require('pg');
var config = {
  host: '***',
  user: '**',
  password: '**',
  database: '**',
  ssl: true
};

var conString = process.env.DATABASE_URL || config;
var client = new pg.Client(conString);
client.connect();
appointments = [];
var queryString = "SELECT * FROM appointments;"
var query = client.query(queryString);
query.on("row", function(row) {
  appointments.push(row);
});
query.on("end", function() {
  client.end();
  res.send(appointments);
});

结果如下图(db记录实际上是502): enter image description here

【问题讨论】:

  • 我认为我们需要在服务器端查看更多上下文,包括整个请求处理程序。一种猜测是您没有正确声明 appointments 变量,因此它可能会在请求之间共享。
  • 但是,但是,但是……当然是!我在处理程序之外声明了变量。谢谢
  • 那么,这是问题所在吗?
  • 是的,实际上我在其他处理程序上使用了“var约会=[]”,正如您指出的那样,我在这个特定的处理程序上使用了普通的“约会=[]”,从而使变量成为全局变量。

标签: node.js postgresql express


【解决方案1】:

把我的 cmets 变成一个答案,因为它解决了你的问题。

看起来您可能需要将您的 appointments 变量正确声明为局部变量,这样它就不会在同时运行的不同请求处理程序之间无意共享 - 允许一个请求处理程序覆盖来自另一个。

仅供参考,如果您将代码置于严格模式,那么它会立即将这些错误标记为错误。

【讨论】:

    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多