npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mongo-connect-next

v2.0.0

Published

MongoDB connector for Next.js applications using Mongoose

Readme

🔮 mongo-connect-next

A lightweight and powerful TypeScript library for connecting Next.js 16+ apps to MongoDB using Mongoose 9+ — with multi‑DB support, connection caching, and full production-ready controls.


🎨 Why This README Looks Better Now

This upgraded version includes:

✅ Better semantic structure (headers, labels) ✅ Cleaner code box styles & spacing ✅ Modern badge layout + centered section ✅ Better callout boxes, emojis, highlights ✅ Improved tables ✅ Clear separation of sections with horizontal rules ✅ Restored missing old-content sections ✅ Enhanced typography & readability


Features

  • 🔌 Flexible Connection Modes — Single or multiple databases
  • Next.js 16 Optimized (App Router + Edge/Server Runtimes)
  • 📊 Connection Caching — Eliminates duplicate connects
  • 🧠 Zero‑Config Mongoose Handling
  • 🔐 Full ENV Support
  • 📘 Native TypeScript 5.9+ types
  • 🛡️ Production Ready — TLS, pooling, timeouts
  • 🔧 Tools IncludeddisconnectMongo, getConnectionStatus

📦 Installation

npm install mongo-connect-next
# or
yarn add mongo-connect-next
# or
pnpm add mongo-connect-next

🚀 Quick Start Guide

1️⃣ Add Environment Variables

MONGODB_URI=mongodb+srv://username:[email protected]/

2️⃣ Use Inside Next.js Route Handlers

import { NextResponse } from "next/server";
import { connectMongo } from "mongo-connect-next";

export async function GET() {
  try {
    await connectMongo(); // Reuses cached connection
    return NextResponse.json({ message: "Connected!", status: "success" });
  } catch (error) {
    return NextResponse.json(
      { error: "DB connection failed" },
      { status: 500 }
    );
  }
}

3️⃣ Define Mongoose Models Safely

import mongoose from "mongoose";

const UserSchema = new mongoose.Schema({
  name: String,
  email: { type: String, unique: true, required: true },
  createdAt: { type: Date, default: Date.now },
});

// Prevent recompilation in Next.js
export default mongoose.models.User || mongoose.model("User", UserSchema);

💡 Usage Examples

Single Database Connection

await connectMongo(); // Uses ENV URI
await connectMongo({ dbName: "mydb" });
await connectMongo({ uri: "mongodb://localhost:27017/x", dbName: "x" });

Multiple Databases

await connectMongo({
  uri: "mongodb://localhost:27017/users",
  dbName: "users",
  multiDb: true,
});
await connectMongo({
  uri: "mongodb://localhost:27017/products",
  dbName: "products",
  multiDb: true,
});

Advanced Mongoose Options

await connectMongo({
  dbName: "prod",
  mongooseOptions: {
    maxPoolSize: 20,
    tls: true,
    serverSelectionTimeoutMS: 10000,
    socketTimeoutMS: 60000,
  },
});

🧩 Connection Utilities

import { disconnectMongo, getConnectionStatus } from "mongo-connect-next";

getConnectionStatus("users");
await disconnectMongo("users"); // specific
await disconnectMongo(); // all

📚 API Reference

connectMongo(options?)

| Option | Type | Description | Default | | ----------------- | ------- | -------------------- | ------------------------- | | uri | string | MongoDB URI | process.env.MONGODB_URI | | dbName | string | Database name | undefined | | multiDb | boolean | Multi-database mode | false | | mongooseOptions | object | Raw Mongoose options | {} |

Returns: Promise<Mongoose>


disconnectMongo(dbKey?)

Disconnect one DB or all.

getConnectionStatus(dbKey?)

Returns connection info.

{
  connected: boolean;
  connecting: boolean;
  key?: string;
}

🧪 Testing Example

import { connectMongo, disconnectMongo } from "mongo-connect-next";

describe("MongoDB Connection", () => {
  afterEach(async () => disconnectMongo());

  it("connects successfully", async () => {
    const mongoose = await connectMongo({
      uri: process.env.MONGODB_URI_TEST,
      dbName: "testdb",
    });
    expect(mongoose.connection.readyState).toBe(1);
  });
});

📝 License

MIT © IdeaGraphix