Node.js连接PostgreSQL报错:client.query is not a function
问题分析与解决
核心错误原因
1. 未正确处理异步函数返回值
connectToDb()是异步函数,直接赋值给client时,得到的是Promise对象而非PostgreSQL的Client实例。Promise没有query方法,因此抛出TypeError: client.query is not a function。
2. 查询结果获取方式错误
await client.query(query).rows写法逻辑错误:client.query()返回的是Promise,必须先通过await拿到完整的结果对象,才能访问其rows属性。
修正后的代码
const consts = require('./constants'); const bcrypt = require('bcrypt'); const process = require('process'); require('dotenv').config(); const { Client } = require("pg") const command = "login_user" const pass = "login_user" // 用立即执行异步函数处理顶层异步逻辑 (async () => { const client = await connectToDb(); if (command === consts.LOGIN_USER) { await loginUser(client, pass); } })(); async function connectToDb() { const dbClient = new Client({}); await dbClient.connect(); return dbClient; } async function loginUser(client, pass) { const query = { text: 'SELECT * FROM users' } // 先await获取结果对象,再访问rows属性 const res = (await client.query(query)).rows; console.log(res); await client.end(); }
关键修正点
- 用立即执行异步函数(IIFE)包裹顶层逻辑,等待
connectToDb()的Promise完成,确保拿到真正的Client实例。 - 调整查询结果的获取方式,将
await client.query(query).rows改为(await client.query(query)).rows,保证逻辑顺序正确。
内容的提问来源于stack exchange,提问作者Lil
相关产品推荐
相关产品推荐

