首页 > 解决方案 > 强制池请求按照它们产生的顺序来解决

问题描述

我有一个运行 PostgreSQL 数据库的 Node.js 服务器。我已将客户端设置为发出编辑数据的请求,等待所述请求解决,然后发送另一个请求以接收应用了新更改的所有数据。

这很好用,但是由于某种原因,它经常失败,我不知道为什么。数据库中的数据确实发生了变化,并且请求了新数据,但由于某种原因,新数据中没有显示新的更改(但是刷新页面会导致它反映新的更改)。我认为这是因为我的请求有时会乱序发送,但事实并非如此。我对正在发生的事情的最佳猜测是数据库落后了,因此我的 Node.js 代码执行得非常快,并告诉客户端它已准备好发送新数据,但是当它要求数据库给它新数据时data 数据库有时没有足够的时间来完成更新其内容,因此它提供的是旧数据......

我用来调用数据库的代码是这样的:

const {Pool} = require("pg");
const pool = new Pool({
    user: "postgres",
    database: "databasename",
    password: "mypassword",
    port: 5432
});
pool.connect((err,client,done) => {
    
    client.query("SELECT id, title, description, people, due_date, real_due_date FROM table ORDER BY due_date;",(error,result) => {
        if(error){
            console.log(error);
            resolve("error");
        }else{
            resolve(JSON.stringify(result.rows));
        }
    });

    done();
});

(这只是演示我使用的结构的一个片段,实际代码的内容并不特定于问题。)

我正在使用同一个池向数据库发出所有请求。我想知道,有没有一种方法可以强制这个池按照接收到的顺序完成请求,这样它只会在完全完成SELECT后执行查询?UPDATE如果是这样,您认为这会解决我的问题吗?

标签: node.jspostgresql

解决方案


推荐阅读