调用pg-promise扩展方法触发TypeError: Invalid connection details: undefined
问题排查与解决
核心原因
你遇到的错误根源是QuestionsRepository实例未正确关联pg-promise的数据库连接实例,导致调用方法时无法获取有效连接配置。直接执行SQL和测试连接能成功,说明基础连接配置无问题,问题出在Repository类的扩展或实例化逻辑上。
具体修复步骤
1. 修正Repository类定义
确保QuestionsRepository在定义时接收数据库实例并保存,避免内部重新初始化连接:
class QuestionsRepository { constructor(db) { this.db = db; // 保存传入的数据库实例 } create(questionData) { return this.db.none('INSERT INTO questions(title, content) VALUES(${title}, ${content})', questionData); } }
2. 正确关联数据库实例
通过pg-promise的实例来初始化Repository,不要在Repository内部重新创建pg-promise实例:
const pgp = require('pg-promise')(); const db = pgp(你的连接配置); // 方式1:直接传入db实例初始化Repository const questionsRepo = new QuestionsRepository(db); // 方式2:通过pg-promise扩展注册(推荐,方便全局调用) db.$extend({ questions: new QuestionsRepository(db) });
3. 规避错误写法
绝对不要在Repository内部无配置初始化pg-promise,这会直接导致连接信息undefined:
// 错误示例,务必避免 class QuestionsRepository { constructor() { const pgp = require('pg-promise')(); this.db = pgp(); // 未传入连接配置,触发错误 } }
4. 验证实例调用逻辑
确保调用create方法时,使用的是已关联有效数据库实例的Repository对象,而非重新创建的空实例。比如依赖注入场景下,要确认注入的是正确初始化后的实例。
验证修复
完成上述调整后,重新调用QuestionsRepository.create()方法,即可正常执行SQL操作,不再抛出连接信息undefined的错误。
内容的提问来源于stack exchange,提问作者Natural Unintelligence
相关产品推荐
相关产品推荐

