node.js - 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=https
enter code here
解决方案
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 }
});
推荐阅读
- php - Laravel Paginator 'options' 参数
- graph - Visibility Graph 算法在时间序列中的应用
- docker - 单个 Docker 容器中的 aspnet 核心 web api 和 SPA (ReactJs)
- java - 识别多个字符
- r - 在 R 中获取公历周数(类似于 Excel)
- mysql - Docker 提交实际上并没有提交
- python - 如何在单词之后和字符之前获取列表
- sql - 是否可以在 psql 中为表创建全局别名?
- azure-ad-b2c - Azure B2C - 基于电子邮件域的用户不同品牌
- c# - EventHub Azure 函数正确触发,但 EventData.Body 为 0 字节