Funciona perfectamente cuando lo probé localmente. Pero Heroku da este error después de la implementación del servidor. ¿Alguien puede ayudar?
{ "message": "Operation `posts.find()` buffering timed out after 10000ms" }índice.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}`); });El archivo del controlador está aquí. Estoy tratando de obtener todas las publicaciones. Localmente no tengo ningún error.
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, }); } };Tuve un problema similar, pero me di cuenta de que no había configurado las Config Vars para la variable CONNECTDB_URL correctamente en Heroku. Ese podría ser tu problema aquí.
Después de 1 mes de investigación y de luchar con el código, finalmente obtuve una solución. Tengo exactamente el mismo problema que tú. El problema en mi caso no estaba en el código, sino en que mongoDB se negaba a sí mismo. Si usa MongoDB atlas para administrar su base de datos, entonces necesita agregar una IP confiable a las opciones de seguridad de su base de datos. En ese caso, esa debería ser la IP del Servidor Heroku.
Sin embargo, hay un problema: Heroku no proporciona ninguna dirección IP para su servidor ( https://help.heroku.com/4WADH6LX/can-you-provide-me-with-the-ip-address-for-my- aplicación ), y aunque puede usar un paquete de terceros como Zerigo DNS , una opción de uso gratuito que le da a su servidor Heroku una dirección IP. Aquí hay un enlace sobre cómo configurarlo: https://devcenter.heroku.com/articles/zerigo_dns
Sin embargo, usé una forma diferente, menos segura, pero más fácil . Al configurar las IP incluidas en la lista blanca (las que aceptará MongoDB) en MongoDB Atlas, puede seleccionar una opción para confiar en todos, es decir, cada dirección IP, que incluirá su servidor Heroku.
Aquí hay algunas fotos útiles:
Primero, haga clic en Acceso a la red en la pestaña de seguridad en el panel lateral izquierdo. 
Luego, esta ventana debería abrirse y hacer clic en Agregar dirección IP. Su propia dirección IP ya se agregó automáticamente, es por eso que su servidor localhost funcionó, pero el servidor Heroku no. MongoDB permitió que el servidor de su computadora solicitara datos, pero no el de Heroku.
En la ventana emergente, seleccione PERMITIR TODAS LAS IP o algo así. Entonces debería aparecer una nueva IP debajo de la primera. Tendrá una dirección de 0.0.0.0/0 que significa: "cualquiera"
Por último, es posible que desee agregar variables de entorno de Heroku mediante la CLI de Heroku. No estoy seguro, pero parece que un archivo .env podría no ser suficiente, así que agregue su URL mongoDB, secretos y puertos en Heroku también.
En la descripción general de la aplicación, haga clic en configuración
Luego, al revelar las variables de configuración:
Y simplemente agregue las variables de su archivo .env: