当我在本地尝试时,它工作得很完美。但是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,
});
}
};
3条答案
按热度按时间dgjrabp21#
我也遇到过类似的问题,但我意识到我没有在Heroku中正确地设置CONNECTDB_URL变量的Config Vars。这可能是你的问题。
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文件中的变量:
cyvaqqii3#
如果你的mongo_db_url是正确的,尝试删除node_modules和yarn.lock或package.json.lock。
运行npm i或Yarn
然后重新部署到Heroku