首页 > 解决方案 > at=error code=H12 desc="Request timeout" in node.js.如何处理?

问题描述

2020-07-21T06:54:58.030920+00:00 heroku [路由器]:

at=error code=H12
> desc="Request timeout"

方法=获取路径=“/Recipies”

host=desolate-beach-26163.herokuapp.com request_id=25f963a1-ce9e-43c6-a054-72c8a7a33ea8 fwd="157.36.134.120" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 protocol=httpsenter code here

标签: node.js

解决方案


Heroku 中的H12 “请求超时”是由长时间运行的操作引起的。我不确定您是否使用此路由从数据库中提取数据,但这是从 heroku 上的 node.js 连接到数据源时的常见问题

首先,检查您的数据库连接字符串,以确保配置没有受到影响。在您的应用程序 (server.js) 的开头,您可以注销数据库 URL:

console.log("Database_URL", process.env.DATABASE_URL);

到达路线后(在您的情况下为“/Recipies”),检查项目目录中的日志:

heroku logs --tail

您的连接字符串应类似于:

postgres://qi34l...545b4@ec2-3-63-192-23.compute-1.amazonaws.com:5432/aj48e4ewfjow34

如果没有,请检查您的 package.json、Procfile 和 index.js 文件是否有可能覆盖 DATABASE_URL 的内容。

您可以通过“psql”命令行工具与您的 url 连接来验证连接字符串。它看起来像这样(但用您的连接字符串替换 URL) -

psql postgres://qi34l...545b4@ec2-3-63-192-23.compute-1.amazonaws.com:5432/aj48e4ewfjow34

如果可以连接,则可能是 postgresql 库的初始化方式存在问题。如果您使用的是最新的“node-postgres”(“pg”),请确保将 ssl rejectUnauthorized 设置为 false:

const { Pool } = require('pg');
const pool = new Pool({
    connectionString: process.env.DATABASE_URL,
    ssl: { rejectUnauthorized: false }
});

推荐阅读