UnhandledPromiseRejectionWarning:错误:用户的密码身份验证失败

时间:2019-07-09 05:55:42

标签: javascript node.js postgresql

我通过以下命令在中创建了一个用户:

 function add_to_custom_table() 
    {
        if ( is_single() ) 
        {
                  $table_name = $wpdb->prefix . "my_plugin_table";

                   echo "<!-- ID: ". get_the_ID . ", TYPE: " . get_post_type($post->ID) . " -->";

    $data = array( 'post'  => get_the_ID(), 'type'  => get_post_type(get_the_ID()) );
    $format = array( '%d', '%s');


             if( $wpdb->insert( $table_name, $data, $format ) )
             {
               echo "<!-- RESULT:: ADDED: ". $wpdb->insert_id . " -->";
             }

        }
    }

但是它没有要求输入新密码,因此我认为该密码已设置为计算机的sudo密码。但是,当我尝试连接到数据库时,使用以下代码:

createuser --interactive

我收到此错误:

async function connect() {
    let connection_string = "postgres://[username]:[password]@localhost:5432/[database]"
    let client = new pg.Client(connection_string)
    await client.connect()

    let query = await client.query("select * from Messages;")
    query.rows.forEach(row => {
        console.log(row)
    })
    await client.end()
}

我该如何解决?

5 个答案:

答案 0 :(得分:0)

我删除了用户,

(node:7106) UnhandledPromiseRejectionWarning: error: password authentication failed for user "[username]"

并重新创建用户,这次使用以下命令:

drop owned by [username];
drop user [username];

现在,它要求将新密码提供给该用户。然后相同的代码可以正常工作。

答案 1 :(得分:0)

    async function connect() {
        let connection_string = "postgres://[username]:[password]@localhost:5432/[database]"
        let client = null;
        try {
         new pg.Client(connection_string)
         } catch (e) {
          console.log (e);
return;
         }
try {
        await client.connect()
} catch (e) {
return;
}

try {
        let query = await client.query("select * from Messages;")
} catch(e) {
return ;
}
        query.rows.forEach(row => {
            console.log(row)
        })
        await client.end()
    }

您可以使用try catch块来处理错误。 现在,为什么会出现错误,无论您提供的用户名/密码为何,都无法输入详细信息

答案 2 :(得分:0)

我不了解 Postgres DB ,但是我建议使用NodeJS时需要做一件事。 NodeJS提供了一个 unhandledRejection 钩子来全局处理每个承诺拒绝。您可以通过在主文件( server.js或app.js )中添加这样的代码安全性来使用它。

process.on('unhandledRejection', (reason, promise) => {
  // call a function which will send a mail of this rejection
});

通过监视原因和承诺,您可以更好地理解。 希望对您有所帮助。快乐编码:)

答案 3 :(得分:0)

请尝试使用以下简单代码与PostgreSQL数据库连接。 创建一个具有凭据的新用户,例如用户名:Education和密码:password007。

 var express = require('express'),
    pg = require('pg'),
    app = express();

//DB Connect String
var connect = "postgres://education:password007@localhost/recipebookdb";


app.get('/', function(req, res) {
    //Pg Connect
    // var pool = new pg.Pool()
    // console.log(req.params.user_id);
    pg.connect(connect, function(err, client, done) {
        if(err) {
            return console.error('error facing client from pool', err);
        }
        client.query('SELECT * FROM recipes', function (err, result) {
            if(err) {
                return console.error('error runnign query', err);
            }
            res.render('index', {recipes: result.rows});
            done();
        });
    });
});

答案 4 :(得分:0)

您需要使用try catch处理错误,还需要记录unhandledRejection的原因。这是根据您的情况提供的示例

async function connect() {
    try {
        let connection_string = "postgres://[username]:[password]@localhost:5432/[database]"
        let client = new pg.Client(connection_string)
        await client.connect()
    } catch (err) {
        throw err;
    }
    try {
        let query = await client.query("select * from Messages;");

        query.rows.forEach(row => {
            console.log(row)
        })

        await client.end()
    } catch (err) {
        throw err;
    }
}

process.on('unhandledRejection', (reason, promise) => {
    console.log('Unhandled Rejection at:', reason.stack || reason)
  });