كيفية إنشاء نظام CRUD احترافي باستخدام Node.js وMySQL وExpress

Amine
05/09/2024

1. مقدمة

CRUD هو اختصار للعمليات الأساسية التي يحتاج إليها أي تطبيق يدير البيانات، وهي: Create (إنشاء)، Read (قراءة)، Update (تحديث)، وDelete (حذف). في هذا الدليل، سنقوم ببناء نظام CRUD باستخدام Node.js وExpress.js للتعامل مع الخادم، وMySQL لإدارة قاعدة البيانات. سنقوم ببناء واجهة برمجة تطبيقات (API) تتيح تنفيذ هذه العمليات على قاعدة البيانات.

2. إعداد بيئة العمل

في هذه الخطوة، سنقوم بإعداد بيئة العمل. يتضمن ذلك تثبيت Node.js، إعداد مشروع جديد، وتثبيت الحزم المطلوبة مثل Express.js وMySQL2 للتفاعل مع قاعدة البيانات.

2.1 تثبيت Node.js وnpm

أولاً، تأكد من أن Node.js مثبت على جهازك. يمكنك تحميله وتثبيته من الموقع الرسمي. عند تثبيت Node.js، سيتم تثبيت npm (مدير الحزم) تلقائيًا. للتحقق من التثبيت، استخدم الأوامر التالية في سطر الأوامر:

node -v
npm -v

يجب أن تعرض هذه الأوامر رقم الإصدار المثبت لـ Node.js وnpm.

2.2 إنشاء مشروع جديد

افتح الطرفية (Terminal) وأنشئ مجلدًا جديدًا لمشروعك. بعد ذلك، ادخل إلى المجلد وقم بتهيئة المشروع باستخدام npm.

mkdir crud-mysql-node
cd crud-mysql-node
npm init -y

الأمر npm init -y ينشئ ملف package.json الذي يحتوي على معلومات المشروع والحزم المستخدمة. هذا الملف سيحتوي على جميع الحزم التي سنقوم بتثبيتها وإعدادات المشروع.

2.3 تثبيت الحزم الضرورية

الخطوة التالية هي تثبيت الحزم الضرورية للتعامل مع الخادم وقاعدة البيانات. سنستخدم Express.js كإطار عمل للتعامل مع الطلبات، وMySQL2 للتفاعل مع قاعدة البيانات، وbody-parser لتحليل محتوى الطلبات القادمة.

npm install express mysql2 body-parser

شرح الحزم:

  • express: لإنشاء خادم ويب لمعالجة الطلبات HTTP (مثل GET، POST، PUT، DELETE).
  • mysql2: مكتبة للتعامل مع قاعدة بيانات MySQL.
  • body-parser: لتحليل محتوى الطلبات (عادةً JSON) حتى نتمكن من قراءة بيانات POST بسهولة.

3. الاتصال بقاعدة البيانات MySQL

في هذه الخطوة، سنقوم بإنشاء اتصال مع قاعدة بيانات MySQL. هذا الاتصال يسمح لتطبيق Node.js بإرسال الاستعلامات إلى قاعدة البيانات وقراءة أو تعديل البيانات. تأكد من تثبيت MySQL على جهازك وإنشاء قاعدة بيانات لاستخدامها.

3.1 إعداد الاتصال بقاعدة البيانات

قم بإنشاء ملف جديد باسم db.js، الذي سيحتوي على إعدادات الاتصال بقاعدة البيانات. تأكد من إدخال تفاصيل قاعدة البيانات الخاصة بك مثل اسم المستخدم وكلمة المرور.

// db.js
const mysql = require('mysql2');

// إنشاء اتصال بقاعدة البيانات
const db = mysql.createConnection({
  host: 'localhost',
  user: 'root', // اسم المستخدم لقاعدة البيانات
  password: 'password', // كلمة المرور الخاصة بقاعدة البيانات
  database: 'testdb' // اسم قاعدة البيانات
});

// التحقق من الاتصال
db.connect((err) => {
  if (err) {
    console.error('Error connecting to MySQL database:', err);
    return;
  }
  console.log('Connected to MySQL database!');
});

module.exports = db;

هنا نستخدم مكتبة mysql2 لإنشاء اتصال بقاعدة البيانات. إذا حدث خطأ أثناء الاتصال (مثل كلمة مرور خاطئة)، سيتم عرض رسالة خطأ. إذا كان الاتصال ناجحًا، ستتم طباعة رسالة تأكيد. تأكد من تحديث host، user، password، وdatabase بالقيم الصحيحة.

4. إنشاء قاعدة البيانات والجداول

الآن، نحتاج إلى إنشاء قاعدة بيانات وجداول في MySQL لتخزين البيانات. إذا لم تكن MySQL مثبتة على جهازك، قم بتثبيتها وتشغيلها. بعد ذلك، استخدم الأوامر التالية لإنشاء قاعدة بيانات وجداول في MySQL. افتح MySQL باستخدام الطرفية أو أي أداة GUI مثل phpMyAdmin:

CREATE DATABASE testdb;

USE testdb;

CREATE TABLE books (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(100),
  author VARCHAR(100),
  published_date DATE
);

في هذا المثال، قمنا بإنشاء قاعدة بيانات باسم testdb وجدول يسمى books لتخزين معلومات حول الكتب (العنوان، المؤلف، وتاريخ النشر). تأكد من أن اسم قاعدة البيانات يطابق الاسم الذي وضعته في ملف db.js.

5. بناء العمليات الأساسية CRUD باستخدام Express.js

سنقوم الآن ببناء العمليات الأساسية (CRUD) في ملف app.js. سنقوم ببناء واجهة برمجة تطبيقات (API) تتعامل مع عمليات إنشاء، قراءة، تحديث، وحذف البيانات من قاعدة البيانات.

// app.js
const express = require('express');
const bodyParser = require('body-parser');
const db = require('./db');

const app = express();
app.use(bodyParser.json());

// إنشاء كتاب جديد (Create)
app.post('/books', (req, res) => {
  const { title, author, published_date } = req.body;
  const sql = 'INSERT INTO books (title, author, published_date) VALUES (?, ?, ?)';
  db.query(sql, [title, author, published_date], (err, result) => {
    if (err) throw err;
    res.json({ message: 'Book added!', bookId: result.insertId });
  });
});

// قراءة جميع الكتب (Read)
app.get('/books', (req, res) => {
  const sql = 'SELECT * FROM books';
  db.query(sql, (err, results) => {
    if (err) throw err;
    res.json(results);
  });
});

// تحديث كتاب (Update)
app.put('/books/:id', (req, res) => {
  const { title, author, published_date } = req.body;
  const { id } = req.params;
  const sql = 'UPDATE books SET title = ?, author = ?, published_date = ? WHERE id = ?';
  db.query(sql, [title, author, published_date, id], (err, result) => {
    if (err) throw err;
    res.json({ message: 'Book updated!' });
  });
});

// حذف كتاب (Delete)
app.delete('/books/:id', (req, res) => {
  const { id } = req.params;
  const sql = 'DELETE FROM books WHERE id = ?';
  db.query(sql, [id], (err, result) => {
    if (err) throw err;
    res.json({ message: 'Book deleted!' });
  });
});

// بدء الخادم
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

شرح العمليات:

  • POST /books: لإضافة كتاب جديد إلى قاعدة البيانات.
  • GET /books: لقراءة جميع الكتب الموجودة في قاعدة البيانات.
  • PUT /books/:id: لتحديث معلومات كتاب معين باستخدام معرفه.
  • DELETE /books/:id: لحذف كتاب من قاعدة البيانات باستخدام معرفه.

في كل عملية، نقوم بإرسال استعلام SQL إلى قاعدة البيانات باستخدام db.query، ونعيد النتيجة إلى العميل باستخدام res.json(). تأكد من أن التطبيق يبدأ عند تشغيل node app.js وأنه يتصل بقاعدة البيانات بدون مشاكل.

6. اختبار API باستخدام Postman

بعد إنشاء العمليات الأساسية، يمكنك استخدام أداة مثل Postman لاختبار واجهة برمجة التطبيقات (API). فيما يلي بعض الأمثلة على الطلبات التي يمكنك إرسالها:

  • إضافة كتاب جديد: إرسال طلب POST إلى http://localhost:3000/books مع بيانات الكتاب في JSON:
{
  "title": "Node.js for Beginners",
  "author": "John Doe",
  "published_date": "2024-09-18"
}
  • قراءة جميع الكتب: إرسال طلب GET إلى http://localhost:3000/books.
  • تحديث كتاب: إرسال طلب PUT إلى http://localhost:3000/books/{id} مع البيانات المحدثة.
  • حذف كتاب: إرسال طلب DELETE إلى http://localhost:3000/books/{id}.

7. تحسين الأمان

في التطبيقات الحقيقية، يجب أن تهتم بتحسين الأمان، مثل التحقق من صحة البيانات الواردة والتحقق من الأخطاء. استخدام مكتبات مثل express-validator للتحقق من صحة البيانات يمكن أن يكون مفيدًا:

npm install express-validator

ثم استخدامه للتحقق من صحة البيانات الواردة:


const { body, validationResult } = require('express-validator');

// إنشاء كتاب جديد (Create) مع التحقق من صحة البيانات
app.post('/books', [
  body('title').notEmpty().withMessage('Title is required'),
  body('author').notEmpty().withMessage('Author is required'),
  body('published_date').isDate().withMessage('Valid date is required')
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }

  const { title, author, published_date } = req.body;
  const sql = 'INSERT INTO books (title, author, published_date) VALUES (?, ?, ?)';
  db.query(sql, [title, author, published_date], (err, result) => {
    if (err) throw err;
    res.json({ message: 'Book added!', bookId: result.insertId });
  });
});

8. الخاتمة

في هذا الدليل، تعلمنا كيفية بناء نظام CRUD باستخدام Node.js وMySQL وExpress.js. قمنا بإعداد بيئة العمل، إنشاء اتصال بقاعدة البيانات، وبناء واجهة برمجة تطبيقات لإدارة البيانات. لقد قمنا أيضًا بتحسين الأمان باستخدام التحقق من صحة البيانات. هذا المشروع يمكن توسيعه بسهولة ليشمل ميزات إضافية مثل التحقق من صحة البيانات أو إدارة المستخدمين. يمكنك الاستمرار في تحسين التطبيق عن طريق إضافة مصادقة المستخدمين باستخدام مكتبة مثل Passport.js، أو حتى بناء واجهة مستخدم باستخدام إطار عمل مثل React أو Vue.js.

الآن بعد أن أصبح لديك أساس قوي، يمكنك توسيع هذا المشروع ليشمل ميزات أكثر تعقيدًا وتخصيصًا لتلبية احتياجاتك في تطوير تطبيقات الويب.

التعليقات

اترك تعليقاً