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


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

کپی
npm install mssql

سپس، کافیست تا در فایل env.production. متغیرهای محیطی مربوط به دیتابیس خود را قرار دهید؛ به عنوان مثال:

کپی
DB_USER=sa
DB_PASS=6fdZJSt5LCXcVIZa0mgMLOS6
DB_HOST=bromo.liara.cloud
DB_PORT=33951
DB_NAME=testDB

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

کپی
import sql from 'mssql';

const mssqlConfig = {
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  server: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT, 10),
  database: process.env.DB_NAME,
  options: {
    trustServerCertificate: true, 
  },
};

export async function connectToMSSQL() {
  const pool = await sql.connect(mssqlConfig);
  return pool;
}

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

کپی
import { connectToMSSQL } from '@/lib/mssql';

export default async function handler(req, res) {
  const pool = await connectToMSSQL();
  pool.close();

  res.status(200).json({ message: 'Connected to MSSQL successfully' });
}

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

کپی
import { useEffect, useState } from 'react';

export default function Home() {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);

  useEffect(() => {
    async function fetchData() {
      try {
        const res = await fetch('/api/mssql');
        const result = await res.json();
        setData(result);
      } catch (err) {
        setError(err);
      }
    }

    fetchData();
  }, []);

  return (
    <div>
      <h1>Database Connection Test</h1>
      {error ? (
        <p>Error: {error.message}</p>
      ) : data ? (
        <pre>{JSON.stringify(data, null, 2)}</pre>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
}

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

استفاده از Connection Pooling

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

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

کپی
import sql from 'mssql';

const mssqlConfig = {
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  server: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT, 10),
  database: process.env.DB_NAME,
  options: {
    trustServerCertificate: true, 
  },
  pool: {
    max: 5,  // amount of connections in same time
    min: 0,
    idleTimeoutMillis: 30000
  }
};

export async function connectToMSSQL() {
  const pool = await sql.connect(mssqlConfig);
  return pool;
}