尝试将我的Node.js应用程序连接到Heroku PostgreSQL数据库,连接到数据库时遇到困难

w1e3prcc  于 2022-11-13  发布在  Node.js
关注(0)|答案(1)|浏览(151)

我对Node、Postres等比较陌生。我按照5年前在一个类似项目中使用的指南操作,但它不起作用。我也尝试了各种解决类似问题的方法,但都不起作用。
似乎大多数人无法连接,因为Heroku有一个process.env.DATABASE_URL的问题,但我已经尝试了各种手动输入数据的方法,它仍然无法连接。
我可以连接到这个数据库,并从powershell运行查询,但它从来没有通过这个节点方法工作。
尝试通过端点连接到数据库时Heroku给我的错误代码:at=error code=H12 desc="Request timeout" method=GET path="/demosql" host=<host> request_id=bec5a277-9c18-48a5-8742-fc26429ab fwd="73.254.66.157" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
Index.js:

const express = require("express");
const app = express();

const bodyParser = require("body-parser");
app.use(bodyParser.json());

const pgp = require('pg-promise')();
pgp.pg.defaults.ssl = true;

let ssl = {rejectUnauthorized: false};

const config = {
  host: 'ec2-54-225-234-165.compute-1.amazonaws.com',
  port: 5432,
  database: '<db>',
  user: '<user>',
  password: '<password>',
  max: 30, // use up to 30 connections
  ssl: ssl,
};
const db = pgp(config);

if (!db) {
  console.log(
    "FAILED! Follow the intructions and set your DATABASE_URL correctly"
  );
  process.exit(1);
} else {
    console.log('connected to ' + config.host)
}

app.get("/test", (req, res) => {

    console.log('testing')
    db
      .any("SELECT * Demo LIMIT 10")
      .then((res) => {
        console.log(res);
      })
      .catch((err) => {
        console.error(err);
      })
      .then(() => {
        db.$pool.end();
      });
  });

app.get("/demosql", (req, res) => {
  db.manyOrNone("SELECT Text FROM Demo")
    //If successful, run function passed into .then()
    .then((data) => {
      res.send({
        success: true,
        names: data,
      });
    })
    .catch((error) => {
      console.log(error);
      res.send({
        success: false,
        error: error,
      });
    });
});

package.json

...
  "dependencies": {
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "form-data": "^2.3.2",
    "mysql": "^2.15.0",
    "npm": "^5.7.1",
    "pg": "^7.4.1",
    "pg-promise": "^8.1.1",
    "request": "^2.88.0"
  }
...

谢谢你的帮助!

nafvub8i

nafvub8i1#

Heroku Postgres enforces SSL适用于所有客户端连接。您可以尝试将sslmode=require等效于连接字符串。

相关问题