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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:01:18