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، از دستور زیر استفاده کنید:
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
در گام بعد، فایل 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
برای اجرای فایل index.js
node index.js
اگر تنظیمات بهدرستی اعمال شده باشند، باید خروجی زیر را دریافت کنید:
Connected to database
ارتباط با دیتابیس
برای بررسی عملکرد اپلیکیشن NodeJS، میتوانید یک جدول جدید ایجاد کرده و عملیات CRUD را با استفاده از دستورهای SQL انجام دهید.
ایجاد جدول جدید
فایل index.js
nano index.js
قبل از دستور ;return poolPromise
()connectToDB
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
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