Express.js应用程序查询PostgreSQL数据库时超时



我已经构建了一个Express.jsapp,由Heroku托管PostgreSQL数据库。

这个应用程序直到一个月前都在正常运行,在那之前的几个月都在正常运行。然而,当我今天登录时,我遇到了一个严重的问题。

每当我尝试访问任何查询数据库的页面时,它都会尝试加载几秒钟,然后给我标准的Heroku应用程序错误;页面。

通过Javascript访问数据库

这是我查询数据库的代码的一部分:

var that = this;
var title = "The Journal";
var queryString = "SELECT * FROM JournalEntry "+
"ORDER BY theTimeStamp ASC;";
var extract, data;
const client = new Client({
connectionString: process.env.DATABASE_URL,
ssl: { rejectUnauthorized: false }
});
console.log(process.env.DATABASE_URL);
console.log("Hello!");
client.connect();
console.log("My!");
client.query(queryString, (err, result) => {
if(err) throw err;
console.log("Lovely!");
extract = result.rows;
data = interpretJournalExtract(extract);
data = objectifyExtract(data);
client.end();
that.finaliser.protoRender(req, res, "tabular",
{ title: title, data: data });
});

当我运行这段代码时,日志是这样的:

2021-03-02T16:12:14.780345+00:00 app[web.1]: postgres://stfonefosxlmgt:227d3914dfb105c6ad3db47ad854f771391b15c8dead2da0a691a66d25cb2f65@ec2-54-228-237-40.eu-west-1.compute.amazonaws.com:5432/de337svimlvbgo
2021-03-02T16:12:14.780701+00:00 app[web.1]: Hello!
2021-03-02T16:12:14.781269+00:00 app[web.1]: My!
2021-03-02T16:12:44.784363+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/journal" host=hgmj.herokuapp.com request_id=f28bdda2-f3bd-40b2-a894-e07cb9e0054c fwd="86.191.159.122" dyno=web.1 connect=1ms service=30012ms status=503 bytes=0 protocol=http
2021-03-02T16:12:44.785541+00:00 app[web.1]: GET /journal - - ms - -

你会注意到日志变成了"Hello!"one_answers"My!",而不是"Lovely!"。

通过Heroku CLI访问数据库

同样值得注意的是,I可以通过Heroku CLI访问数据库,当我这样做时,我的屏幕是这样的:
-> Connecting to postgresql-curly-19296
psql (12.6 (Ubuntu 12.6-0ubuntu0.20.04.1), server 11.11 (Ubuntu 11.11-1.pgdg16.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
hgmj::DATABASE=>

为什么会发生这种情况,我能做些什么?

查看您的错误代码(503),并且给定您的代码之前是工作的,这意味着由于某种原因PostgreSQL数据库不可用。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503

我建议检查这里定义的DATABASE_URL环境变量:

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

我也有同样的问题。添加

ssl: { rejectUnauthorized: false }

参数表示连接工作。我需要升级pg包让它工作。

可能与这个问题有关https://status.heroku.com/incidents/2208。尝试重置您的数据库凭据。我也有同样的问题,它不能解决它,但你可以试试。

我在连接到数据库时遇到了类似的问题,在我的情况下,解决方案是将参数require: true添加到ssl属性。对我来说是这样的:

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

最新更新