پلتفرم NextJS
(NextJS Platform)اگر که از Pages Router استفاده میکنید؛ در ابتدا باید در مسیر pages/api/ یک فایل به نام db.js ایجاد کنید. در ادامه، با توجه به نوع دیتابیسها، محتوای این فایل را خواهیم نوشت.
اتصال به دیتابیسها
فهرست عناوین
- اتصال به دیتابیس MySQL
- اتصال به دیتابیس MariaDB
- اتصال به دیتابیس PostgreSQL
- اتصال به دیتابیس SQL Server
- اتصال به دیتابیس MongoDB
- اتصال به دیتابیس Redis
- استفاده از Connection Pooling
اتصال به دیتابیس 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;
اکنون میتوانید از دیتابیس 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;
برای بررسی اتصال به دیتابیس نیز میتوانید از قطعه کد زیر در فایل 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;
برای بررسی اتصال به دیتابیس نیز میتوانید از قطعه کد زیر در فایل 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;
اکنون میتوانید درستی اتصال به دیتابیس را در 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;
اکنون میتوانید درستی اتصال به دیتابیس را در 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;
پس از واردکردن اطلاعات فوق، میتوانید درستی اتصال به دیتابیس را با استفاده از قطعه کد زیر در 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});
متوجه شدم، برو گام بعدی!