连接Node.js和PostgreSQL时身份验证失败

4
我已经在PostgreSQL上设置了部分数据库,并且可以通过psql REPL来执行我需要的所有操作,但是当我尝试从同一台机器上的node.js访问时,会出现“用户“[我的用户名]”的密码验证失败”错误。
根据在线教程,我的数据库访问代码类似于:
var pg = require('pg');
var path = require('path');
var connectionString = require(path.join(__dirname, '../', '../', 'config'));

var client = new pg.Client(connectionString);
client.connect();
var query = client.query('CREATE TABLE items(id SERIAL PRIMARY KEY, text VARCHAR(40) not null, complete BOOLEAN)');
query.on('end', function() { client.end(); });

但是由于我已经使用了一些自己的函数来设置表格,因此我只是试图通过以下方式在POST上访问这些函数:

var express = require('express');
var router =  express.Router();
var pg = require('pg');
var path = require('path');
var connectionString = 'postgres://localhost:5432/[My User Name]?ssl=true;

router.post('/locations', function(req,res) {
    var client = new pg.Client(connectionString);
    client.connect();

    var query = client.query([Call to my function, works in REPL, something like "SELECT * FROM create_location([Data from req])"]);
});

我已经设置了我的pg_.conf:

local  all  postgres         peer
local  all  all              trust
local  all  all 127.0.0.1/32 trust
host   all  all ::1/128      md5
1个回答

9

您的连接字符串似乎有误。连接字符串必须像这样:

postgres://[username]:[password]@[host]:[port]/[databasename]

而在你的情况下:
postgres://[username]@localhost:5432/[databasename]?ssl=true

1
在这种情况下,我是否需要始终将我的密码以明文形式挂在那里? - Jackson
如果您的pg_config已经设置为信任所有本地用户,则可以从连接字符串中删除密码部分。但是,最后一个参数必须是数据库名称而不是用户名。 - chresse
我相信我的数据库名称和用户名是相同的。 - Jackson
请注意,当未指定用户时,将使用默认值 - vitaly-t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接