Next.js Discord

Discord Forum

Operation `menuitems.find()` buffering timed out after 10000ms

Answered
Collared Plover posted this in #help-forum
Open in Discord
Collared PloverOP
I'm encountering a "Operation menuitems.find() buffering timed out after 10000ms" error in my Next.js project. The error seems to originate from a Mongoose query in my function that fetches menu items from a MongoDB database. I’m using a custom connectToDatabase function to handle the database connection.
Answered by "use php"
Prisma I didn't knew at the time.

The problem with data api is that if you were to migrate to other providers, chances are they don't have a data api, or its completely different.

Or I'd have tried prisma only
View full answer

40 Replies

Collared PloverOP
@"use php"
1 min
SO @Collared Plover a long time ago, I helped someone with the same issue. However, I couldn't find that thread
The simple fix for that person to use data api
Collared PloverOP
Hey at @"use php" it's been a while
export default async function fetchMenuItems() {
  try {
    await connectToDatabase();
    const menuItems = await MenuItem.find({});
    return JSON.stringify(menuItems);
  } catch (error) {
    console.error("Error fetching menu items:", error);
    throw new Error("Failed to fetch menu items. Please try again later.");
  }
}
you can also try using prisma
@"use php" you can also try using prisma
Collared PloverOP
I already have it working using an API route, but I’m trying to refactor the code to fetch data directly from a function that queries the database instead.
I'm not sure, but Mongodb support just suggested to upgrade to dedicated plan long before when someone faced this issue
@"use php" wait you are using it with prisma?
Collared PloverOP
No
@"use php" ?
Collared PloverOP
I'm using mongoose, I've never used Prisma before
@"use php" can you share your function `connectToDatabase`?
Collared PloverOP
import { isAdmin } from "@/app/api/auth/[...nextauth]/route";
import { Category } from "@/models/Category";
import { MenuItem } from "@/models/MenuItem";
import { Order } from "@/models/Order";
import { User } from "@/models/User";
import { MongoClient, Collection, Document, ObjectId } from "mongodb";

// Database Connection Functions:

const uri = process.env.MONGO_URL || ""; // Provide a fallback value of an empty string
const options = {};

let mongoClient: MongoClient | undefined; // Specify the type of mongoClient as MongoClient | undefined

if (!uri) {
  throw new Error("Please add your Mongo URI to .env");
}

export async function connectToDatabase() {
  try {
    // Check if MongoClient is already instantiated to ensure singleton behavior
    if (mongoClient) {
      return { mongoClient };
    }

    // Create a new MongoClient instance and connect to the database
    mongoClient = await new MongoClient(uri, options).connect();
    console.log("Connected to Database!");

    // Return the connected MongoClient instance
    return { mongoClient };
  } catch (error) {
    console.error("Error connecting to MongoDB:", error);
    throw error; // Rethrow the error to propagate it to the caller
  }
}
;
you can try increasing timeout, but it'll still take longer time to return data
If possible, try using it with prisma
Collared PloverOP
@"use php" Found a similar issue; but no idea how it affects my code
Can I know when does the issue actually takes place
like when you fetch for the first time does it take place?
As far as I remember, it takes place after few times of getting or putting data
@"use php" Can I know when does the issue actually takes place
Collared PloverOP
yes When I fetch for the first time
@"use php" A connection is established with my database before the issue occurs, as it successfully prints 'Connected to Database,' which indicates that the connection was successful.
i'm not sure about this. I only ever got this issue with mongoose
since then I switched to data api
Collared PloverOP
@"use php" So I should just stick to fetching data from api?
@Collared Plover <@755810867878297610> So I should just stick to fetching data from api?
It’s a personal opinion. But either Prisma or data api.
@"use php" I built a package for it: https://www.npmjs.com/package/next-mongodb-api
If data api, you can use this wrapper. Because if You’re facing any issues? Just contact me : )
You can use any other wrapper, but this one has support for types
Collared PloverOP
@"use php" I'm checking out prisma, seems interesting
@"use php" What do you personally use if you don't mind me asking?
I made this: https://www.npmjs.com/package/next-mongodb-api, because:
- I use mongodb Api in my project
- I don't have to type fetch everywhere again n again
- Has type support
So I needed a reusable, and thought of making a package of it
@Collared Plover <@755810867878297610> I'm checking out prisma, seems interesting
Prisma I didn't knew at the time.

The problem with data api is that if you were to migrate to other providers, chances are they don't have a data api, or its completely different.

Or I'd have tried prisma only
Answer
I also realised this step isn’t needed. Just export revalidate on api route