node js heroku与postgresql交互

时间:2018-06-09 17:52:25

标签: javascript node.js postgresql heroku psql

我正在尝试将PostgreSQL数据库添加到heroku上的现有nodejs项目中。我根本无法访问本地版本的数据库,也无法写入heroku数据库。 以下是我尝试过的代码的一部分:

const { Client } = require('pg');

const client = new Client({
  connectionString: process.env.DATABASE_URL,
  ssl: true,
});

client.connect();

// client
let qu = 'SELECT table_schema,table_name FROM information_schema.tables;';
//qu = 'CREATE TABLE test (name varchar(40));';
//qu = 'SELECT * FROM test;';
// qu = 'INSERT INTO test name VALUES("testasdf");';
// qu = 'CREATE DATABASE X

client.query(qu, (err, res) => {
  //console.log("trying");
  if (err) throw err;
  for (let row of res.rows) {
    console.log(JSON.stringify(row));
  }
  client.end();
});

我已尝试按照此处的说明操作:https://devcenter.heroku.com/articles/heroku-postgresql

但我无法访问本地数据库或对远程数据库执行任何操作。

以下是本地错误消息:

(node:8402)UnhandledPromiseRejectionWarning:错误:用户密码验证失败" ..."     在Connection.parseE(... / theland / node_modules / pg / lib / connection.js:553:11)     在Connection.parseMessage(... / theland / node_modules / pg / lib / connection.js:378:19)     在TLSSocket。 (... / theland / node_modules / PG / LIB / connection.js:119:22)     在emitOne(events.js:116:13)     在TLSSocket.emit(events.js:211:7)     在addChunk(_stream_readable.js:263:12)     在readableAddChunk(_stream_readable.js:250:11)     在TLSSocket.Readable.push(_stream_readable.js:208:10)     在TLSWrap.onread(net.js:597:20) (node:8402)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误源于在没有catch块的情况下抛出异步函数,或者拒绝未使用.catch()处理的promise。 (拒绝ID:1) (节点:8402)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

我不知道如何在远程桌面上创建表格。

我在Linux上运行 node-v = 8.11.2 npm-v = 6.1.0 pg:^ 7.4.3

我也在使用psql,没有GUI。

感谢您的帮助。

EDIT --- 我应该在哪里添加身份验证?如果我添加身份验证并且不希望别人能够成为我的数据库的管理员,是否需要从github获取脚本?

1 个答案:

答案 0 :(得分:0)

  1.   

    用户“...”的密码验证失败

  2. 显然,您没有为用户使用正确的密码。好消息是有服务器响应您的请求。

    1.   

      未处理的承诺拒绝

    2. 有一个错误,可能会抛出:

      if (err) throw err;
      

      你似乎不会在某处抓到它,你只是扔它。尝试将其放入一些try-catch-block中,例如像

      function queryDatabase() {
        try {
          const client = new Client({
            connectionString: process.env.DATABASE_URL,
            ssl: true,
          });
      
          client.connect();
      
          // client
          let qu = 'SELECT table_schema,table_name FROM information_schema.tables;';
          //qu = 'CREATE TABLE test (name varchar(40));';
          //qu = 'SELECT * FROM test;';
          // qu = 'INSERT INTO test name VALUES("testasdf");';
          // qu = 'CREATE DATABASE X
      
          client.query(qu, (err, res) => {
            //console.log("trying");
            if (err) throw err;
            for (let row of res.rows) {
              console.log(JSON.stringify(row));
            }
            client.end();
          });
        } catch (error) {
          // if you need further help, remember to provide this error here.
          console.log(error);
        }
      }