heroku 操作'posts.find()'缓冲在10000ms后超时

ttp71kqs  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(171)

当我在本地尝试时,它工作得很完美。但是Heroku在服务器部署后给出了这个错误。有人能帮忙吗?

{
  "message": "Operation `posts.find()` buffering timed out after 10000ms"
}

index.js

const express = require("express");
const cors = require("cors");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
require("dotenv").config();

const app = express();
const postRouter = require("./routes/post");
const port = process.env.PORT || 5000;

app.use(cors());
app.use(bodyParser.json({ limit: "30mb", extended: true }));
app.use(bodyParser.urlencoded({ limit: "30mb", extended: true }));

app.get("/", (req, res) => {
  res.send("it works");
});
//mongoose connection
const URL = process.env.CONNECTDB_URL;

mongoose.connect(URL, {
  useNewUrlParser: true,
  useCreateIndex: true,
  useUnifiedTopology: true,
});
const connection = mongoose.connection;
connection.once("open", () => {
  console.log("MongoDB database connection established successfully");
});

//router

app.use("/posts", postRouter);

//listening
app.listen(port, () => {
  console.log(`Server is running on port: ${port}`);
});

controller文件在这里。我正在尝试获取所有帖子。本地没有任何错误

const getPosts = async (req, res) => {
  try {
    const posts = await Post.find({});
    res.status(200).json(posts);
  } catch (error) {
    res.status(404).json({
      message: error.message,
    });
  }
};
dgjrabp2

dgjrabp21#

我也遇到过类似的问题,但我意识到我没有在Heroku中正确地设置CONNECTDB_URL变量的Config Vars。这可能是你的问题。

jk9hmnmh

jk9hmnmh2#

经过一个月的研究和代码的斗争,我终于得到了一个修复。我有完全相同的问题,你。在我的情况下,问题不在代码,但在mongoDB拒绝自己。如果你使用MongoDB atlas来管理您的数据库,那么你需要添加一个信任的IP到您的数据库安全选项。在这种情况下,这应该是Heroku服务器的IP。
但是,还有一个问题:Heroku不为您的服务器(https://help.heroku.com/4WADH6LX/can-you-provide-me-with-the-ip-address-for-my-application)提供任何IP地址,您可以使用第三方软件包,如Zerigo DNS,这是一个免费使用的选项,可以为您的Heroku服务器提供IP地址。https://devcenter.heroku.com/articles/zerigo_dns
然而,我使用了一种不同的,不太安全,但更简单的方法。当在MongoDB Atlas中设置白名单IP(MongoDB将接受的IP)时,您可以选择信任每个人,即每个IP地址,这将包括您的Heroku服务器。
以下是一些有用的照片:
首先,在左侧面板的“安全”选项卡中单击“网络访问”。

然后这个窗口应该会打开,点击添加IP地址。你自己的IP地址已经被自动添加了,这就是为什么你的localhost服务器可以工作,而Heroku服务器不能。MongoDB允许你电脑的服务器请求数据,但不允许Heroku的。

在弹出窗口中,选择ALLOW ALL IPs或类似的选项。然后,新的IP地址将出现在第一个IP地址下。它的地址为0.0.0.0/0,表示“任何”

最后,您可能希望使用Heroku CLI添加Heroku环境变量。我不确定,但似乎.env文件可能不够,因此也在Heroku中添加mongoDB URL、机密和端口。
在应用程序概览中,单击设置

然后,在显示配置变量:


指令集
只需添加.env文件中的变量:

cyvaqqii

cyvaqqii3#

如果你的mongo_db_url是正确的,尝试删除node_modules和yarn.lock或package.json.lock。
运行npm iYarn
然后重新部署到Heroku

相关问题