You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js对接PostgreSQL接口调用10次后Postman请求延迟或无响应求助

问题原因
  • 核心问题是数据库连接使用后未释放:PostgreSQL 默认连接池的最大连接数通常为 10,你的代码中每次请求都通过 db.connectDatabase() 获取了一个数据库客户端连接,但完成查询逻辑后没有将连接释放回连接池,10 次请求后连接池被完全占满,后续请求只能阻塞等待空闲连接,就出现了响应极慢或者无响应的情况。
  • 额外隐患:现有异常捕获逻辑仅将错误抛出,没有处理错误场景下的连接释放,就算补充了正常流程的释放逻辑,请求报错时连接依然会泄漏。
解决方案
  1. 新增 finally 代码块,保证无论请求正常执行还是报错,都能把连接释放回连接池,同时优化异常场景的响应逻辑,避免前端收不到错误提示。
  2. 修正后的代码示例:
var db = require('../config/dbConfig')
var sendResp = require('../helper/response').sendRsp;

module.exports.saveSubscriberDetail = async (req,res) => {
  let objDetailsInput = Object.assign({}, common.detailsInput);
  errors = []
  let finalData;
  objDetailsInput = req.body;
  var reqObj = {};
  var client = null;
  try {
    client = await db.connectDatabase();
    if (objDetailsInput.subscriberDetails.p_address.country) {
      const rows = await client.query('SELECT * FROM country where country_code = $1', [objDetailsInput.country])
      if(rows) {
        sendRsp(res,201,"Success",rows);
      } else {
        sendRsp(res,500,"Internal Server Error")
      }
    }
  } catch (error) {
    sendRsp(res, 500, "Internal Server Error", error.message)
  } finally {
    // 只要成功获取到连接,无论执行结果如何都释放
    if (client) {
      client.release()
    }
  }
};
  1. 可选优化:如果你的 db.connectDatabase() 返回的是连接池实例,可以直接调用连接池的 query 方法,无需手动获取和释放连接,PG 库会自动管理连接生命周期,进一步降低泄漏风险,语法为 await pool.query(查询语句, 参数)。

内容的提问来源于stack exchange,提问作者DRV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:09:04