0

我有一条路线可以处理时间打孔的 API 调用。其中一个电话是“clock_in”。

router.route('/clock_in').post(managerCheck, startTimeCheck, isClockedIn, clockIn);

这些函数中的每一个都将执行它自己的数据库连接,查询数据库以获取一些信息,然后响应用户或转到 next() 函数。

我正在使用“pg-poll”中的池。

我的连接看起来像这样。

export const **isClockedIn** = (request, response, next) => {

  const query = `select * from....`;

  const values = [value1, value2];

  pool.connect((err, client, release) => {

    client.query(query, values, (err, result) => {
    //do stuff
    }

并且所有功能的连接基本相同。

我想做的是只有 1 个pool.connect实例,然后 api 调用中的每个函数都将使用该连接来执行他们的client.query。我只是不确定我是如何设置的。

希望我的问题很清楚。我的所有代码都有效,只是效率不高,因为它为 1 个 api 调用建立了多个数据库连接。

4

1 回答 1

0

当我从我的 API 进行调用时,通过观察我的数据库连接,我学到了很多东西。

当您使用 pg.pool 进行第一次调用时,将与数据库建立连接。查询完成后,连接将进入空闲状态,如果运行另一个 pg.pool 命令,它将使用该空闲连接。连接将在空闲 10 秒后关闭(您可以对此进行配置)。

您还可以设置最大连接数(默认 10)。因此,如果您同时运行 10 个查询,它们都会打开一个连接并运行。完成后,他们的连接将处于空闲状态。如果您同时运行另外 10 个,它们将重用这些连接。

如果您只想强制 1 个永远不会关闭的连接(不是说您想这样做),您可以将空闲超时设置为 0,并且最多设置 1 个连接。然后,如果您一次运行 10 个查询,它们将排成一行,一次运行一个。

const pool = new pg.Pool({
  user: 'postgres',
  host: 'localhost',
  database: 'database',
  password: 'password',
  port: 5000,
  idleTimeoutMillis: 0,
  max: 1,
});

这个页面非常有帮助,虽然直到我看到我的 API 运行时的数据库连接时我才明白很多。

https://node-postgres.com/api/pool

注意:上面的代码应该在它自己的js文件中,所有连接都应该引用它。如果您创建新的 pg.Pools,我相信它们会打开自己的连接,这可能不是您想要的。

于 2020-01-16T15:21:22.110 回答