从pg迁移至pg-promise时遇Invalid options参数错误求助
解决pg-promise配置时的参数错误问题
我刚帮你梳理了下问题,你从pg切换到pg-promise时踩了两个常见的坑,咱们一步步来解决:
问题回顾
你遇到了两个明确的错误:
- 使用连接对象配置时出现
Error: Option "user" is not recognized. - 改用连接字符串时出现
TypeError: Invalid "options" parameter: "postgres://me:complete@localhost:5432/education_be"
你的配置代码里有两个关键问题,咱们逐个修正:
解决方案1:使用连接对象配置
首先,pg-promise的连接对象里没有name这个属性,正确的用户属性名是user(你之前pg的配置其实也应该用user,可能是环境变量命名巧合才正常运行)。另外,pg-promise的模块导出是一个工厂函数,你需要先调用它(可以不传参数,或者传全局配置),再传入连接对象:
require('dotenv').config(); const pgp = require('pg-promise')(); // 先调用工厂函数获取实例创建器 // 修正连接对象的属性名:name → user const connection = { user: 'me', password: 'password', host: 'localhost', database: 'education_be', port: 5432 }; const db = pgp(connection); module.exports = db;
解决方案2:使用连接字符串配置
同样要注意,不能直接把连接字符串传给pg-promise工厂函数,得先调用工厂函数得到实例创建器,再传入连接字符串:
require('dotenv').config(); const pgp = require('pg-promise')(); // 先执行工厂函数 const db = pgp('postgres://me:complete@localhost:5432/education_be'); module.exports = db;
为什么之前会报错?
pg-promise的设计逻辑是:模块导出的函数是用来创建全局配置的工厂,调用它之后返回的才是用于创建具体数据库连接的函数。你之前要么是直接把连接字符串传给了工厂函数(它只接受配置对象,不接受连接字符串),要么是连接对象里用了错误的属性名name(应该是user)。
内容的提问来源于stack exchange,提问作者kevin
相关产品推荐
相关产品推荐

