部署在Heroku上的MERN应用无法响应代码为H12状态503(超时)的请求

时间:2020-07-02 11:26:01

标签: node.js mongodb express heroku mern

在本地,该应用程序按其应有的方式工作,尽管在进行了一些“更严格”的部署后,它并未从我的MongoDB中获取任何数据。

这是一个简单的“博客”应用程序,可与其他内容一起获取帖子。它还包括简单的JWT身份验证,该身份验证要求提取用户。

应用程序的行为就像无法响应请求一样。等待验证或发布30秒钟后,会向控制台抛出一个错误,状态码为H12,这是超时。

我想实现的目标

我想看看我的应用程序功能如何在本地运行-这意味着成功获取所需的任何数据,即获取帖子,用户,创建帖子,注册用户,登录等。

我做了什么

  • 我已将任何IP的访问权限列入白名单
  • 我在Heroku的一侧添加了配置键
  • 我已经尝试了几次本地版本,一切都很好
  • 我没有忘记将process.env.PORT添加到传递给app.listen()的PORT变量中

代码

server.js

const express = require("express");
const mongoose = require("mongoose");
const path = require("path");
const config = require("config");

// Init app
const app = express();

// Bodyparser
app.use(express.json());

// DB config
const db = config.get("mongoURI");

// Connect to mongo
mongoose
    .connect(db, {
        useUnifiedTopology: true,
        useNewUrlParser: true,
        useCreateIndex: true
    })
    .then(() => console.log("MongoDB Connected..."))
    .catch(err => console.error(err));

// Routes
app.use("/api/posts", require("./routes/api/posts"));
app.use("/api/users", require("./routes/api/users"));
app.use("/api/auth", require("./routes/api/auth"));

// Server static assets if in production
if (process.env.NODE_ENV === "production") {
    // Set static folder
    app.use(express.static("client/build"));

    app.get("*", (req, res) => {
        res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
    });
}

const PORT = process.env.PORT || 5000;

app.listen(PORT, () => console.log(`Server running on port ${PORT}...`));

“ heroku logs”终端命令出错

我将跳过所有成功的日志,以保持结果整洁。

...

2020-07-02T10:24:18.433851+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api/auth" host=name.herokuapp.com request_id=56eacd71-676b-492e-9fa1-2b811a196468 fwd="IP" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https
2020-07-02T10:24:19.959960+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api/auth" host=name.herokuapp.com request_id=b508c1c7-577e-4a3e-b7c4-7cb38bfcf450 fwd="IP" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
2020-07-02T10:24:20.091984+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api/auth" host=name.herokuapp.com request_id=26e2be39-64a0-4222-b497-08ba3031c601 fwd="IP" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
2020-07-02T10:24:20.200092+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api/auth" host=name.herokuapp.com request_id=e9d6ce08-dcbe-4466-acea-220adee22e88 fwd="IP" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https
2020-07-02T10:24:20.323332+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api/auth" host=name.herokuapp.com request_id=768f861b-54b1-410e-b4f9-ff1b5cc2a3dd fwd="IP" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 protocol=https

.
.
.

2020-07-02T10:25:34.592262+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/api/posts" host=name.herokuapp.com request_id=15025277-bcb9-437a-b1a8-0feda845076d fwd="IP" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
2020-07-02T10:25:42.416101+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/api/posts" host=name.herokuapp.com request_id=9d86e158-1067-4090-b5f6-2a4125ad0300 fwd="IP" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https

...

和往常一样,我会很乐意提供任何其他代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案

一个小时左右后,问题自行解决。我什么也没做,只是回来了,打开了应用程序,一切正常。

如果任何人有相同或相似的问题,请尝试使用我以前找到的解决方案进行修复,并在“我做了什么”部分中提到它们。