اتصال به دیتابیس MongoDB در برنامه‌های NextJS


روش‌ها و کتابخانه‌های مختلفی برای اتصال به MongoDB در NextJS وجود دارد. یکی از این راه‌ها، استفاده از پکیج mongodb است که در ابتدا، با اجرای دستور زیر، باید آن را نصب کنید:

کپی
npm install mongodb

پس از آن، کافیست تا اطلاعات مربوط به دیتابیس خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:

کپی
DB_URI=mongodb://root:uyYDoeYGcPr4xK8PSWnjsT9S@bromo.liara.cloud:32005/my-app?authSource=admin

در ادامه، بایستی در مسیر lib (یا اگر که از دایرکتوری src استفاده می‌کنید؛ در مسیر src/lib)، یک فایل به نام mongodb.js ایجاد کنید و قطعه کد زیر را در آن، قرار دهید:

کپی
import { MongoClient } from 'mongodb';

const client = new MongoClient(process.env.DB_URI);

let db;

async function connectToDatabase() {
    if (!db) {
        await client.connect();
        db = client.db();
    }
    return db;
}

export { connectToDatabase };

تمامی کارها انجام شده است و شما می‌توانید با استفاده از قطعه کد مثال زیر در فایل pages/index.js (یا src/pages/index.js) از دیتابیس خود، استفاده کنید:

کپی
import { connectToDatabase } from '@/lib/mongodb';

export default function HomePage({ mongoStatus }) {
    return (
        <div>
            <h1>Connection Status</h1>
            <p>{mongoStatus}</p>
        </div>
    );
}

export async function getServerSideProps() {
    let mongoStatus;

    try {
        const db = await connectToDatabase();
        mongoStatus = db ? 'Connected to MongoDB' : 'Failed to connect to MongoDB';
    } catch (error) {
        mongoStatus = 'Failed to connect to MongoDB';
    }

    return {
        props: {
            mongoStatus,
        },
    };
}

در نظر داشته باشید که می‌توانید قطعه کدهای فوق را با توجه به نیاز خود، تغییر دهید.

استفاده از Connection Pooling

مفهوم Connection pooling به معنای استفاده از یک مجموعه اتصالات از پیش ساخته شده برای اتصال به پایگاه داده است. این تکنیک باعث می‌شود به جای ایجاد و بستن مکرر اتصالات، از اتصالات موجود در مجموعه استفاده شود که کارایی را افزایش می‌دهد.

در پکیج mariadb این قابلیت به صورت خودکار تعبیه شده است و شما می‌توانید در فایل lib/mariadb.js (یا src/lib/mariadb.js) حین اتصال به دیتابیس پارامتر زیر را بر اساس نیاز خود، مقدار دهی کنید:

کپی
import { MongoClient } from 'mongodb';

const client = new MongoClient(process.env.DB_URI, {
    poolSize: 10, // amount of connections in same time
});

let db;

async function connectToDatabase() {
    if (!db) {
        await client.connect();
        db = client.db();
    }
    return db;
}

export { connectToDatabase };