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

Node.js连接PostgreSQL查询返回undefined问题求助

问题解决:Node.js连接PostgreSQL返回undefined

核心错误:回调参数顺序颠倒

pg模块的client.query()方法回调函数的参数顺序是**(err, result)**,你当前代码把结果对象放在了第一个位置、错误对象放在第二个,完全搞反了参数顺序,这会导致:

  • 查询成功时,err为null,但你写的res实际是错误参数(值为null),err参数才是真正的结果对象,此时执行console.log(res.rows)自然返回undefined
  • 查询出错时,错误逻辑也会完全混乱,无法正确捕获报错信息

修正后的代码

const { Client } = require('pg')

const client = new Client({
    host: 'localhost',
    port: 5432,
    database: 'postgres',
    user: 'postgres',
    password: '******'
})

// 先处理连接错误,避免后续操作无意义
client.connect((err) => {
    if (err) {
        console.error('数据库连接失败:', err.message)
        return
    }
    console.log('数据库连接成功')
})

client.query('SELECT * FROM users', (err, res) => {
    if (err) {
        console.error('查询失败:', err.message)
    } else {
        console.log('用户列表:', res.rows)
    }
    client.end()
})

更易维护的写法:使用async/await

回调嵌套容易出错,推荐用async/await处理异步操作,代码逻辑更清晰:

const { Client } = require('pg')

async function getUsers() {
    const client = new Client({
        host: 'localhost',
        port: 5432,
        database: 'postgres',
        user: 'postgres',
        password: '******'
    })

    try {
        await client.connect()
        console.log('数据库连接成功')
        const queryResult = await client.query('SELECT * FROM users')
        console.log('用户列表:', queryResult.rows)
    } catch (error) {
        console.error('操作失败:', error.message)
    } finally {
        // 无论成功失败都关闭连接
        await client.end()
    }
}

getUsers()

额外排查点

  • 确认users表确实存在于postgres数据库中:可以用psql命令行先执行\c postgres切换数据库,再执行SELECT * FROM users;验证数据是否存在
  • 检查PostgreSQL服务是否正在运行
  • 确认配置的端口、用户名、密码与数据库实际设置一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:40:07