我正在使用Knex构建PostgreSQL数据库,并且在运行knex migrate:latest
时始终出现此错误。
error: password authentication failed for user "Joshua Rieth"
at Parser.parseErrorMessage (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\parser.js:278:15)
at Parser.handlePacket (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\parser.js:126:29)
at Parser.parse (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\parser.js:39:38)
at Socket.<anonymous> (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\index.js:8:42)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:295:12)
at readableAddChunk (_stream_readable.js:271:9)
at Socket.Readable.push (_stream_readable.js:212:10)
at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
我假设这与我的用户名有关,但是它应该是设置PostgreSQL时使用的默认postges
用户。我还应该提到用户名和密码在.env文件中。
规格
答案 0 :(得分:1)
设置knex时,除非您想以“当前OS用户”身份连接,否则需要提供用户名/密码。您可以在多个地方设置凭据,因此,如果可以全部检查(并通知我们:)),那将是很好的选择。
一种方法是:
require('knex')({
client: 'pg',
connection: 'postgres://username:password@localhost:5432/dbname'
})
或者,您可以设置环境变量PGUSER和PGPASSWORD,Knex连接也会选择这些变量。
您的connection
也可以配置完整的详细信息,而不是链接:
var knex = require('knex')({
client: 'pg',
version: '12.0',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
要从实际代码中排除用户名/密码,我强烈建议您使用类似dotenv
的软件包:https://www.npmjs.com/package/dotenv
(注意:以下与您的特定错误无关,因为您的用户名未正确指定)我要在Pg端检查的另一件事是您已在pg_hba.conf
中启用了密码验证。 md5方法允许基于密码哈希的身份验证,这应该对您有好处。它应该看起来像这样:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 123.123.123.123/32 md5