Node.js操作PostgreSQL查询数据控制台返回undefined问题求助
问题原因
node-postgres驱动的pool.query()方法执行查询后,返回的是一个封装好的结果对象,你要的用户数据行数组存放在这个对象的rows属性下,直接遍历整个返回对象本身拿不到目标数据。- 你使用的
for...in语法遍历对象时,拿到的是对象的可枚举键名(字符串类型),不是键对应的实际值:哪怕你遍历的是数组,for...in拿到的也是数组索引的字符串值(比如'0'、'1'),根本拿不到具体的行数据,访问.username自然始终返回undefined。
修复方法
先从返回结果中取出rows数据数组,再用正确的遍历方式读取字段即可,以下是几种可直接运行的写法:
写法1:for...of 遍历(推荐,语义最清晰)
const result = await pool.query("SELECT * FROM users"); for (const userRow of result.rows) { console.log(userRow.username); }
写法2:数组forEach遍历
const result = await pool.query("SELECT * FROM users"); result.rows.forEach(userRow => { console.log(userRow.username); });
写法3:传统for索引遍历
const result = await pool.query("SELECT * FROM users"); const userList = result.rows; for (let i = 0; i < userList.length; i++) { console.log(userList[i].username); }
补充:建议给
await查询逻辑加上try/catch错误捕获,避免SQL执行出错时程序直接崩溃。
内容的提问来源于stack exchange,提问作者dontitcare
相关产品推荐
相关产品推荐

