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

Node.js连接GCP Cloud SQL报错ReferenceError: Pool is not defined

报错原因

ReferenceError: Pool is not defined 是典型的未导入依赖类错误,具体触发点包括:

  • 你使用了pg库的Pool连接池类,但没有在代码顶部导入该类
  • 代码中pool、qResult变量未做声明就直接赋值,会触发隐式全局变量问题,严格模式下也会抛错
  • 额外注意:你提到脚本是直接在HTML index页面引入的,前端浏览器环境无法直接运行Node.js的数据库驱动,且前端直连数据库会明文暴露账号密码,存在严重安全风险,这种写法本身就不可行。
解决步骤
  • 安装PostgreSQL驱动依赖
    在Node.js项目根目录执行命令安装官方pg驱动:
npm install pg
  • 补全导入声明,修正服务端连接代码
    数据库连接逻辑必须写在Node.js服务端代码中,文件顶部补全依赖导入和变量声明,修正后的参考代码如下:
// 顶部从pg库导入Pool类
const { Pool } = require('pg');
let pool;
let qResult;

// 用async函数包裹异步逻辑,避免回调嵌套
async function initDbConnection() {
  try {
    pool = new Pool({
      user: "postgres",
      host: "/cloudsql/sfmcsms-d-970229:europe-west1:dsi-sfmc-sms-database",
      database: "postgres",
      password: "dsi-sfmc-sms-database",
      port: 5432, // 端口字段传数字类型,不要传字符串
    });

    // 主动建立测试连接验证连通性
    const testClient = await pool.connect();
    console.log("Connection successful!");
    testClient.release(); // 测试完成后释放连接

    // 执行查询
    const queryRes = await pool.query("select * from ConfigParameter;");
    qResult = queryRes.rows;
    console.log(qResult);
    // 后续在这里编写接口逻辑,把查询结果返回给前端
  } catch (err) {
    console.log("Failed to start pool", err);
  }
}

initDbConnection();
  • 调整前后端交互逻辑
    • 服务端查询到配置表数据后,封装成HTTP接口(可以用express之类的web框架快速实现)
    • 前端HTML页面的脚本只负责调用这个接口拿到数据,再完成下拉组件的选项填充,不要在前端写任何数据库连接相关代码
    • 本地调试GCP Cloud SQL连接时,需要启动Cloud SQL Auth Proxy做端口转发,本地调试阶段host填127.0.0.1即可,等服务部署到GCP对应环境后再换成Cloud SQL的unix套接字路径,同时要保证部署服务的账号拥有Cloud SQL Client权限。

内容的提问来源于stack exchange,提问作者B. Palma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:39:27