NodeJS یک محیط اجرای جاوااسکریپتی است که امکان ساخت سرویسهای مقیاسپذیر و منعطفی را در اختیارتان قرار میدهد. این محیط، از دیتابیسهای مختلفی از جمله MySQL پشتیبانی میکند. شما میتوانید بهراحتی اپلیکیشن NodeJS خود را به MySQL مدیریتشدهی آروانکلاد متصل کنید.
در این راهنما، پس از نصب NodeJS، یک پروزهی نمونه میسازیم و با استفاده از کتابخانهی mysql2
پیشنیازها
پیش از شروع لازم است:
-
یک کلاستر مدیریتشدهی MySQL راهاندازی کنید. به شما در این مسیر کمک میکند.
-
یک سرور ابری برای اجرای NodeJS بسازید. به شما در این مسیر کمک میکند.
گام نخست: نصب NodeJS
برای نصب NodeJS روی سرور میتوانید بر اساس سیستمعاملتان از لینک زیر استفاده کنید:
در این راهنما روش نصب NodeJS در Ubuntu 22.04 را بررسی خواهیم کرد.
پس از اتصال به سرور از طریق SSH، دستور زیر را اجرا کنید:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
این دستور nvm را که یک ابزار برای مدیریت نسخهی NodeJS است نصب میکند.
سپس برای نصب NodeJS، از دستور زیر استفاده کنید:
nvm install 20
این کامند NodeJS را دریافت و نصب میکند. توجه داشته باشید ممکن است پیش از اجرای این دستور نیاز به راهاندازی مجدد ترمینال داشته باشید.
در پایان برای بررسی صحت فرآیند نصب، این دستورها را اجرا کنید:
node -v
npm -v
خروجی این دستورها، نسخهی محیطهای NodeJS و npm است.
گام دوم: راهاندازی پروژه
یک دایرکتوری جدید برای پروژه بسازید:
mkdir project
وارد دایرکتوری project شوید:
cd project
با استفاده از npm مقداردهی اولیهی پروژه را انجام دهید:
npm init -y
دستور بالا یک فایل جدید به نام package.json ایجاد میکند که شامل جزییات و وابستگیهای پروژه است.
پس از آن وابستگیهای پروژه را نصب کنید:
npm i mysql2 dotenv
این دستور، کتابخانههای mysql2 و dotenv را که به اپلیکیشن NodeJS اجازه میدهد با دیتابیس MySQL ارتباط برقرار کند، نصب میکند.
در گام بعد، فایل package.json را باز کرده و بررسی کنید که تمام وابستگیهای مورد نیاز نصب شدهاند:
cat package.json
خروجی باید مشابه زیر باشد:
"dependencies": {
"dotenv": "^16.3.1",
"mysql2": "^3.6.0"
}
سپس فایل اصلی یا index.js پروژه را ایجاد کنید:
touch index.js
با استفاده از ویرایشگری مانند Nano، یک فایل env.
nano .env
متغیرهای زیر را در فایل اضافه کنید. مقادیر نمونه را با جزئیات اتصال دیتابیس MySQL مدیریتشدهی آروان جایگزین کنید:
DB_HOSTNAME = example.db.arvandbaas.ir DB_PORT = 3306 DB_USER = base-user DB_PASSWORD = 'password' DB_NAME = default
فایل را ذخیره کرده و ببندید.
اتصال به دیتابیس
برای اتصال اپلیکیشن NodeJS به دیتابیس MySQL، از کتابخانهی mysql2 و فایل env. استفاده میکنیم.
فایل index.js را باز کرده و ویرایش کنید:
nano index.js
کد زیر را به فایل اضافه کنید:
require('dotenv').config();
const mysql = require('mysql2');
const dbConfig = {
host: process.env.DB_HOSTNAME,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
};
let db;
const connectToDB = async () => {
const pool = mysql.createPool(dbConfig);
const poolPromise = pool.promise();
return poolPromise;
};
const main = async () => {
db = await connectToDB();
console.log('Connected to database');
};
main();
فایل index.js بالا، اپلیکیشن NodeJS شما را به دیتابیس MySQL متصل کرده و اجرای عملیات CRUD را ممکن میکند.
برای اجرای فایل index.js و شروع اپلیکیشن Node.js، دستور زیر را اجرا کنید:
node index.js
اگر تنظیمات بهدرستی اعمال شده باشند، باید خروجی زیر را دریافت کنید:
Connected to database
ارتباط با دیتابیس
برای بررسی عملکرد اپلیکیشن NodeJS، میتوانید یک جدول جدید ایجاد کرده و عملیات CRUD را با استفاده از دستورهای SQL انجام دهید.
ایجاد جدول جدید
فایل index.js را باز کنید:
nano index.js
قبل از دستور ;return poolPromise در متد ()connectToDB، یک کوئری SQL اضافه کنید که یک جدول جدید به نام posts ایجاد کند:
const connectToDB = async () => {
const pool = mysql.createPool(dbConfig);
const poolPromise = pool.promise();
await poolPromise.query("CREATE TABLE IF NOT EXISTS `posts` (`id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `body` varchar(255) NOT NULL, `author` varchar(255), PRIMARY KEY (`id`) );");
const [allPosts, fields] = await poolPromise.query('SELECT * FROM posts;');
console.log(`Posts Table: ${JSON.stringify({ allPosts, fields })}`);
return poolPromise;
};
فایل را ببندید و ذخیره کنید. سپس اپلیکیشن را اجرا کنید:
node index.js
خروجی باید مشابه زیر باشد:
34,0]},"_clientEncoding":"utf8","_catalogLength":3,"_catalogStart":167,"_schemaLength":9,"_schemaStart":171,"_tableLength":5,"_tableStart":181,"_orgTableLength":5,"_orgTableStart":187,"_orgNameLength":6,"_orgNameStart":200,"characterSet":224,"encoding":"utf8","name":"author","columnLength":1020,"columnType":253,"type":253,"flags":0,"decimals":0}]} Connected to database
ایجاد یک پست جدید
فایل index.js را ویرایش کنید:
nano index.js
یک متد جدید به نام ()createNewPost تعریف کنید تا یک پست جدید در جدول posts ایجاد کند:
const createNewPost = async (postData) => {
const { title, body, author } = postData;
const [newPost, fields] = await db.query('INSERT INTO posts (title, body, author) VALUES (?,?,?);', [title, body, author]);
console.log(`New post created: ${JSON.stringify(newPost)}`);
};
متد ()createNewPost را با دادههای مثال در متد ()main فراخوانی کنید تا یک پست جدید ایجاد شود:
await createNewPost({ title: "Test Title", body: "This is the return of test body.", author: "Tommy Shelby" });
فایل را ببندید و ذخیره کنید. سپس اپلیکیشن را اجرا کنید:
node index.js
خروجی باید مشابه زیر باشد:
New post created: {"fieldCount":0,"affectedRows":1,"insertId":4,"info":"","serverStatus":2,"warningStatus":0,"changedRows":0}
دریافت یک پست با ID
فایل index.js را ویرایش کنید:
nano index.js
یک متد جدید به نام ()getPostById اضافه کنید که دادههای یک پست را با استفاده از id دریافت کند:
const getPostById = async (postId) => {
const [post, fields] = await db.query('SELECT * FROM posts WHERE id=?;', [postId]);
console.log(`Post: ${JSON.stringify(post)}`);
};
در متد ()main، متد ()getPostById را با یک postId فراخوانی کنید تا دادههای پست دریافت شود:
await getPostById(1);
فایل را ببندید و ذخیره کنید. سپس اپلیکیشن را اجرا کنید:
node index.js
خروجی باید مشابه زیر باشد:
Post: [{"id":1,"title":"Test Title","body":"This is the return of test body.","author":"Tommy Shelby"}]
بهروزرسانی یک پست با ID
فایل index.js را ویرایش کنید:
nano index.js
یک متد جدید به نام ()updatePostById اضافه کنید که پست را بهروزرسانی کند:
const updatePostById = async (postId, postData) => {
const { title, body } = postData;
const [updatePost, fields] = await db.query('UPDATE posts SET title=?, body=? WHERE id=?;', [title, body, postId]);
console.log(`Post updated: ${JSON.stringify(updatePost)}`);
};
در متد ()main، متد ()updatePostById را با یک postId موجود و دادههای جدید فراخوانی کنید. برای مثال:
await updatePostById(1, { title: 'Updated Title', body: "This is updated post body" });
فایل را ببندید و ذخیره کنید. سپس اپلیکیشن را اجرا کنید:
node index.js
خروجی باید مشابه زیر باشد:
Post updated: {"fieldCount":0,"affectedRows":1,"insertId":0,"info":"Rows matched: 1 Changed: 0 Warnings: 0","serverStatus":2,"warningStatus":0,"changedRows":0}
حذف یک پست با ID
فایل index.js را ویرایش کنید:
nano index.js
یک متد جدید به نام ()deletePostById اضافه کنید که یک پست را با id حذف کند:
const deletePostById = async (postId) => {
const [post, fields] = await db.query('DELETE FROM posts WHERE id=?;', [postId]);
console.log(`Post deleted : ${JSON.stringify(post)}`);
};
در متد ()main، متد ()deletePostById را برای حذف یک پست فراخوانی کنید. برای مثال، پست با آیدی 2 را حذف کنید:
await deletePostById(2);
فایل را ببندید و ذخیره کنید. سپس اپلیکیشن را اجرا کنید:
node index.js
خروجی باید مشابه زیر باشد:
Post deleted : {"fieldCount":0,"affectedRows":1,"insertId":0,"info":"","serverStatus":2,"warningStatus":0,"changedRows":0}
برای آشنایی بیشتر با شیوهی استفاده از کتابخانهی mysql2 در NodeJS،