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
相关产品推荐
相关产品推荐

