我对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"
}
...
谢谢你的帮助!
1条答案
按热度按时间nafvub8i1#
Heroku Postgres enforces SSL适用于所有客户端连接。您可以尝试将sslmode=require等效于连接字符串。