next

پلتفرم NextJS

(NextJS Platform)

اگر که از Pages Router استفاده می‌کنید؛ در ابتدا باید در مسیر pages/api/ یک فایل به نام db.js ایجاد کنید. در ادامه، با توجه به نوع دیتابیس‌ها، محتوای این فایل را خواهیم نوشت.

اتصال به دیتابیس‌ها

فهرست عناوین

اتصال به دیتابیس MySQL

برای اتصال به دیتابیس MySQL می‌توانید از پکیج mysql2 استفاده کنید؛ برای استفاده از این پکیج، باید در ابتدا آن را نصب کنید:

npm install mysql2

اکنون کافیست که قطعه کد زیر را در فایل pages/api/db.js بنویسید:

import mysql from 'mysql2/promise';

const dbConfig = {
  uri: 'mysql://root:pass@host:port/db-name',
};

let connection;

async function connectToDatabase() {
  try {
    if (connection) {
      return connection;
    }

    connection = await mysql.createConnection(dbConfig.uri);

    console.log('Connected to MySQL database!');
    return connection;
  } catch (error) {
    console.error('Error connecting to MySQL database:', error);
    throw error;
  }
}

export default connectToDatabase;
در کد فوق، هر کدام از مقادیر pass و host و port و db_name موجود در دستورmysql://root:pass@host:port/db-name را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

اکنون می‌توانید از دیتابیس MySQL در برنامه‌های خود استفاده کنید؛ قطعه کد زیر مثالی از این کار است که بررسی می‌کند برنامه به دیتابیس متصل است یا خیر:

import connectToDatabase from './api/db.js';

export default function Home({ isConnectedToDB }) {
  return (
    <div>
      <h1>Hello Liara</h1>
      <p>Connected to MySQL: {isConnectedToDB ? 'Yes' : 'No'}</p>
    </div>
  );
}

export async function getStaticProps() {
  let isConnectedToDB = false;

  try {
    await connectToDatabase();
    isConnectedToDB = true;
  } catch (error) {
    isConnectedToDB = false;
  }

  return {
    props: {
      isConnectedToDB,
    },
  };
}

اتصال به دیتابیس MariaDB

برای اتصال به دیتابیس باید در ابتدا پکیج mariadb را نصب کنید:

npm install mariadb

اکنون می‌بایست فایل pages/api/db.js را به نحو زیر تغییر دهید:

import mariadb from 'mariadb';

const pool = mariadb.createPool({
  host: 'your-host',
  user: 'root',
  password: 'your-pass',
  database: 'your-db-name', 
  port: portNumber, // like 33114
});

async function connectToDatabase() {
  let connection;

  try {
    connection = await pool.getConnection();
    console.log('Connected to MariaDB database!');
    return connection;
  } catch (error) {
    console.error('Error connecting to MariaDB database:', error);
    throw error;
  } finally {
    if (connection) connection.release(); 
  }
}

export default connectToDatabase;
در کد فوق، هر کدام از مقادیر your-pass و your-host و portNumber و your-db-name موجود در متغیرpool را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

برای بررسی اتصال به دیتابیس نیز می‌توانید از قطعه کد زیر در فایل pages/index.js استفاده کنید:

import connectToDatabase from './api/db.js';
export default function Home({ isConnectedToDB }) {
  return (
    <div>
      <h1>Hello Liara</h1>
      <p>Connected to MariaDB: {isConnectedToDB ? 'Yes' : 'No'}</p>
    </div>
  );
}

export async function getStaticProps() {
  let isConnectedToDB = false;

  try {
    const connection = await connectToDatabase();
    isConnectedToDB = true;
  } catch (error) {
    isConnectedToDB = false;
  }

  return {
    props: {
      isConnectedToDB,
    },
  };
}

اتصال به دیتابیس PostgreSQL

برای اتصال به دیتابیس PostgreSQL، می‌توانید از پکیج pg استفاده کنید. برای نصب این پکیج کافیست دستور زیر را اجرا کنید:

npm install pg

حال، می‌توانید در pages/api/db.js کد زیر را قرار دهید؛ بدیهی است که قطعه کد زیر فقط یک مثال برای بررسی اتصال به دیتابیس است و باید آن را بسته به نیاز خود، تغییر دهید و بازنویسی کنید:

import { Pool } from 'pg';

const pool = new Pool({
  user: 'root',
  host: 'your_host',
  database: 'your_database_name', // you can use postgres
  password: 'your_password',
  port: PortNo, // like 33263
});

async function connectToDatabase() {
  let client;

  try {
    client = await pool.connect();
    console.log('Connected to PostgreSQL database!');
    return client;
  } catch (error) {
    console.error('Error connecting to PostgreSQL database:', error);
    throw error;
  } finally {
    if (client) client.release();
  }
}

export default connectToDatabase;
در کد فوق، هر کدام از مقادیر your_username و your_host و your_database_name و your_password و PortNo موجود در متغیرpool را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

برای بررسی اتصال به دیتابیس نیز می‌توانید از قطعه کد زیر در فایل pages/index.js استفاده کنید:

import connectToDatabase from './api/db.js';

export default function Home({ isConnectedToDB }) {
  return (
    <div>
      <h1>Hello Liara</h1>
      <p>Connected to PostgreSQL: {isConnectedToDB ? 'Yes' : 'No'}</p>
    </div>
  );
}

export async function getStaticProps() {
  let isConnectedToDB = false;

  try {
    const connection = await connectToDatabase();
    isConnectedToDB = true;
  } catch (error) {
    isConnectedToDB = false;
  }

  return {
    props: {
      isConnectedToDB,
    },
  };
}

اتصال به دیتابیس SQL Server

برای استفاده از دیتابیس SQL Server کافیست تا پکیج mssqlرا نصب کنید:

npm install mssql

حال، می‌توانید در pages/api/db.js قطعه کد زیر را وارد کنید تا با استفاده از این قطعه کد مطمئن شوید که برنامه به دیتابیس متصل است یا خیر:

import { ConnectionPool } from 'mssql';

const config = {
  user: 'sa',
  password: 'your-pass',
  server: 'your-host',
  database: 'your-db-name', // you can use master
  port: portNo, // like 32427
  options: {
    encrypt: false,
    trustServerCertificate: false, // for secure connection
  },
};

const pool = new ConnectionPool(config);

async function connectToDatabase() {
  try {
    await pool.connect();
    console.log('Connected to SQL Server database!');
    return pool;
  } catch (error) {
    console.error('Error connecting to SQL Server database:', error);
    throw error;
  }
}

export default connectToDatabase;
در کد فوق، هر کدام از مقادیر your_pass و your_host و your_db_name و PortNo موجود در متغیرconfig را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید. همچنین توجه داشته باشید که برای اتصال درست به دیتابیس، مقدار encrypt در options باید بر روی false تنظیم شده‌باشد.

اکنون می‌توانید درستی اتصال به دیتابیس را در pages/index.js با استفاده از قطعه کد زیر بررسی کنید:

import connectToDatabase from './api/db.js';

export default function Home({ isConnectedToDB }) {
  return (
    <div>
      <h1>Hello Liara</h1>
      <p>Connected to SQL Server: {isConnectedToDB ? 'Yes' : 'No'}</p>
    </div>
  );
}

export async function getStaticProps() {
  let isConnectedToDB = false;

  try {
    const connection = await connectToDatabase();
    isConnectedToDB = true;
  } catch (error) {
    isConnectedToDB = false;
  }

  return {
    props: {
      isConnectedToDB,
    },
  };
}

اتصال به دیتابیس MongoDB

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

npm install mongodb

حال، می‌توانید در pages/api/db.js قطعه کد زیر را وارد کنید تا با استفاده از این قطعه کد مطمئن شوید که برنامه به دیتابیس متصل است یا خیر:

import { MongoClient } from 'mongodb';

const uri =
  'mongodb://root:pass@host:port/my-app?authSource=admin';

let client;

async function connectToDatabase() {
  try {
    if (!client) {
      client = new MongoClient(uri, {});
      await client.connect();
    }

    console.log('Connected to MongoDB database!');
    return client.db();
  } catch (error) {
    console.error('Error connecting to MongoDB database:', error);
    throw error;
  }
}

export default connectToDatabase;
در کد فوق، هر کدام از مقادیر pass و host و port موجود در متغیرuri را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

اکنون می‌توانید درستی اتصال به دیتابیس را در pages/index.js با استفاده از قطعه کد زیر بررسی کنید:

import connectToDatabase from './api/db.js';

export default function Home({ isConnectedToDB }) {
  return (
    <div>
      <h1>Hello Liara</h1>
      <p>Connected to MongoDB: {isConnectedToDB ? 'Yes' : 'No'}</p>
    </div>
  );
}

export async function getStaticProps() {
  let isConnectedToDB = false;

  try {
    const db = await connectToDatabase();
    isConnectedToDB = db ? true : false;
  } catch (error) {
    isConnectedToDB = false;
  }

  return {
    props: {
      isConnectedToDB,
    },
  };
}

اتصال به دیتابیس Redis

برای اتصال به این دیتابیس در ابتدا باید، پکیج ioredis را نصب کنید:

npm install ioredis

اکنون می‌توانید با استفاده از قطعه کد زیر به دیتابیس متصل شوید:

import Redis from 'ioredis';

const redisConfig = {
  host: 'your-host',
  port: portNo, //like 33016 
  password: 'your-pass',
};

const redisClient = new Redis(redisConfig);

async function connectToDatabase() {
  try {
    if (!redisClient.status || redisClient.status === 'closed') {
        await redisClient.connect();
        console.log('Connected to Redis database!');
      } else {
        console.log('Already connected to Redis!');
      }
  } catch (error) {
    console.error('Error connecting to Redis database:', error);
    throw error;
  }
}

export default connectToDatabase;
در کد فوق، هر کدام از مقادیر your-host و portNo و your-pass موجود در متغیرredisConfig را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

پس از واردکردن اطلاعات فوق، می‌توانید درستی اتصال به دیتابیس را با استفاده از قطعه کد زیر در pages/index.jsبررسی کنید:

import connectToDatabase from './api/db';

export default function Home({ isConnectedToDB }) {
  return (
    <div>
      <h1>Hello Liara</h1>
      <p>Connected to Redis: {isConnectedToDB ? 'Yes' : 'No'}</p>
    </div>
  );
}

export async function getStaticProps() {
  let isConnectedToDB = false;

  try {
    const connection = await connectToDatabase();
    isConnectedToDB = true;
  } catch (error) {
    isConnectedToDB = false;
  }

  return {
    props: {
      isConnectedToDB,
    },
  };
}

استفاده از Connection Pooling

شما می‌توانید در برنامه NextJS خود، قابلیت Connection Pooling را نیز فعال کنید. در Connection Pooling برنامه به جای ایجاد یک ارتباط (Connection) جدید برای انجام عملیات دیتابیسی و بستن آن پس از پایان عملیات، از ارتباط‌هایی که قبلاً ایجاد شده‌اند، استفاده می‌کند.

استفاده از Connection Pooling کارایی برنامه را افزایش می‌دهد و تاثیر بسیار زیادی در بهینه‌سازی و کاهش منابع مورد استفاده برنامه و دیتابیس دارد. بنابراین توصیه می‌شود که حتماً در حالت Production، از این قابلیت، استفاده کنید. در ادامه، به نحوه فعال‌سازی این قابلیت با توجه به نوع هر دیتابیس، خواهیم پرداخت:

قابلیت Connection Pooling در دیتابیس MySQL

برای فعال‌سازی این قابلیت در دیتابیس MySQL می‌توانید در pages/api/db.js از قطعه کد زیر استفاده کنید:

import mysql from 'mysql2/promise';

const dbConfig = {
  uri: 'mysql://root:pass@host:port/db-name',
  connectionLimit: 10, 
};

let pool;

async function connectToDatabase() {
  try {
    if (!pool) {
      pool = mysql.createPool({ ...dbConfig, waitForConnections: true });
      console.log('Created MySQL connection pool');
    }

    const connection = await pool.getConnection();
    console.log('Acquired connection from pool');

    connection.release(); 

    return pool;
  } catch (error) {
    console.error('Error connecting to MySQL database:', error);
    throw error;
  }
}

export default connectToDatabase;
قابلیت Connection Pooling در دیتابیس MongoDB

برای فعال‌سازی این قابلیت در دیتابیس MongoDB فقط کافیست قطعه کد اتصال به دیتابیس را به شکل زیر بنویسید:

client = new MongoClient(uri, {maxpoolSize: 10});
توجه داشته باشید که در قطعه کد‌های مربوط به دیتابیس‌های MariaDB و PostgreSQL و MSSQL قابلیت Connection Pooling فعال است. پس نیازی به تغییر آن‌ها نیست.

متوجه شدم، برو گام بعدی!
;