簡體   English   中英

API 調用中所有函數的 1 db 連接

[英]1 db connection for all functions in API call

我有一個處理時間沖床的 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 調用建立了多個數據庫連接。

當我從我的 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,我相信它們會打開自己的連接,這可能不是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM