You need to enable JavaScript to run this app. Node.js拉取PostgreSQL数据并在web页面展示时触发TypeError的排查求助
优惠活动
大模型
产品
解决方案
定价
更多

Node.js拉取PostgreSQL数据并在web页面展示时触发TypeError的排查求助

代码错误定位与可运行修正方案

直接触发TypeError的根因

代码中调用的pg.connect()是node-postgres(即pg依赖)7.x及更早版本的全局API,在pg@8.0.0之后的版本中该全局方法已被正式移除。直接在高版本依赖环境下调用这个不存在的方法,就会抛出TypeError: pg.connect is not a function,和运行时报错完全匹配。

代码中附带的其他隐性问题

  • 顶部引入的const { ENGINE_METHOD_ALL } = require('constants'); 是无任何实际调用的冗余代码,可直接删除
  • 数据库操作的错误分支仅在服务端控制台打印日志,既没有调用done()释放连接池资源(长期运行会耗尽数据库连接),也没有给前端返回错误响应,会导致请求挂起超时
  • 原代码将done()放在渲染逻辑之后,如果模板渲染环节抛出异常,连接会无法被及时释放

修正后的完整代码

var express = require('express'),
    path = require('path'),
    bodyParser = require('body-parser'),
    cons = require('consolidate'),
    dust = require('dustjs-helpers'),
    { Pool } = require('pg'),
    app = express();

// 显式初始化PostgreSQL连接池,替代旧版全局pg.connect逻辑
const pool = new Pool({
    connectionString: "postgres://postgres:admin@localhost/db1"
});

app.engine('dust', cons.dust);
app.set('view engine', 'dust');
app.set('views', __dirname + '/views');

app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/', function(req, res){
    pool.connect(function(err, client, done) {
        if(err){
            console.error('获取数据库连接失败', err);
            return res.status(500).send('服务暂时不可用');
        }
        client.query('SELECT * FROM tbl_employee', function(err, result){
            // 查询完成第一时间释放连接,避免连接泄漏
            done();
            if(err){
                console.error('数据查询执行失败', err);
                return res.status(500).send('数据加载失败');
            }
            res.render('index', {tbl_employee: result.rows});
        });
    });
});

app.listen(3000, function(){
    console.log('服务已启动,监听端口3000');
});

关键修正逻辑

  • 用显式创建的Pool连接池实例替代旧版全局调用逻辑,从根源上解决pg.connect is not a function的TypeError报错
  • 调整连接释放时机,无论查询成功、失败都第一时间归还连接到池,避免长期运行导致的连接耗尽
  • 所有错误分支增加前端响应,避免请求无响应导致的超时问题
  • 删除无实际作用的冗余依赖引入,精简代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 05:36:04