Ошибка: вызвал end в пуле более одного раза в BoundPool.end

#node.js #p&-promise #node-post&res

#node.js #p&-обещание #узел-post&res

Вопрос:

Когда я пытаюсь извлечь данные из Post&reSQL с помощью p&-promise, он выдает ошибку

Ошибка: вызвал end в пуле более одного раза в BoundPool.end (/workspace/node_modules/p&-pool/index.js:381:19) в Database.pool.end.cb (/workspace/node_modules/p&-promise/lib/database.js:133:31)

 app.&et("/route/:id", async (req: any, res: any) =&&t; {
    const key = req.params.id;
    let status: number;
    let response: any = {};
    console.lo&(key);
    await db.any('SELECT * FROM "schema"."my_table" WHERE key = $1', [key])
        .then(data =&&t; {
            status = 200;
            response = {
                'status': 'success',
                'data': JSON.strin&ify(data)
            }
        })
        .catch(error =&&t; {
            status = 406;
            response = {
                'status': 'failed',
                'error': error.messa&e,
                'errorCode': error.code
            }
        })
        .finally(db.$pool.end);
    res.status(status).send(response);
});  

Когда я должен завершить пул соединений?
Завершится ли это автоматически, когда ответ будет успешным?

Комментарии:

1. Где вы нашли пример вызова .finally(db.$pool.end); в конце вызова API? Вы уничтожаете пул соединений после каждого вызова API, отсюда и ошибка.

2. Разве я не должен завершить это вручную? будет ли это обработано автоматически?

3. да, верно: это не PHP, там у вас новое подключение к БД при каждом запросе. (на самом деле нет, но во время запроса в PHP одно соединение является вашим, и ни один другой запрос не использует его в то же время.) В Node.js однако соединения управляются пулом. для транзакций вы удаляете одну, но для запросов на выборку данных в этом нет необходимости. просто запросите базу данных, будьте довольны данными, и пул будет управлять подключениями за вас.