دليل Knex.js الكامل لـ JavaScript (Node.js) مع أمثلة عملية
1. ما هو Knex.js ولماذا تحتاجه؟
Knex.js هي مكتبة قوية ومرنة وعالية الأداء لبناء استعلامات SQL (SQL query builder) في بيئة Node.js. على عكس مكتبات ORM (Object-Relational Mapping) مثل Sequelize أو TypeORM، لا يحاول Knex.js إخفاء SQL عنك بالكامل. بدلاً من ذلك، يوفر لك واجهة برمجية (API) مريحة وقابلة للتسلسل (chainable) لبناء استعلامات SQL برمجياً، مع إبقاء السيطرة الكاملة على استعلام SQL النهائي. هذا يجعل Knex.js الخيار الأمثل للمشاريع التي تهم فيها الأداء وشفافية الاستعلامات والمرونة، مع تجنب كتابة استعلامات SQL الخام المعرضة للأخطاء النحوية وهجمات حقن SQL (SQL injection).
المهمة الأساسية لـ Knex.js هي تبسيط التفاعل مع قواعد البيانات العلائقية (PostgreSQL, MySQL, SQLite3, MSSQL, Oracle) من خلال JavaScript. يتولى Knex.js المهام الروتينية مثل ترميز المعرفات والقيم (الحماية من حقن SQL)، وإدارة مجموعة الاتصالات (connection pool)، وترحيل بنية البيانات (migrations) (إنشاء وتعديل الجداول)، وإضافة البيانات التجريبية (seeding). كما يدعم Knex.js المعاملات (transactions)، والاستعلامات الفرعية (subqueries)، والدوال النافذة (window functions)، والاستعلامات الخام (raw queries)، وغيرها الكثير، مما يجعله أداة متعددة الاستخدامات للمشاريع الصغيرة والأنظمة عالية التحميل.
بالنسبة لموقع PythonLib التعليمي الذي يركز على التعلم العملي، يمثل Knex.js أهمية خاصة. فهو يسمح للطلاب الذين يعرفون أساسيات SQL بالانتقال بسرعة إلى كتابة كود آمن وفعال في Node.js. تعلم Knex.js هو جسر ممتاز بين نظرية SQL وتطوير الواجهة الخلفية (backend) الحقيقي. أنت لا تتعلم فقط "سحر" ORM، بل تفهم كيف يترجم كل دالة تستخدمها إلى استعلام SQL محدد، وهو أمر بالغ الأهمية لتصحيح الأخطاء وتحسين الأداء.
2. التثبيت
يتم تثبيت Knex.js عبر مدير الحزم npm. ستحتاج أيضاً إلى تثبيت مشغل (driver) لقاعدة البيانات التي تستخدمها.
# تثبيت Knex.js
npm install knex --save
# تثبيت مشغل PostgreSQL
npm install pg --save
# تثبيت مشغل MySQL / MariaDB
npm install mysql2 --save
# تثبيت مشغل SQLite3
npm install sqlite3 --save
# تثبيت مشغل MSSQL
npm install tedious --save
# تثبيت مشغل Oracle
npm install oracledb --save
ملاحظة مهمة: يتم تثبيت مشغل قاعدة البيانات بشكل منفصل. يستخدمه Knex.js للتفاعل المباشر مع قاعدة البيانات. بعد التثبيت، يمكنك تثبيت واجهة الأوامر (CLI) الخاصة بـ Knex.js بشكل عام لإدارة الترحيلات والبيانات التجريبية: npm install knex -g.
3. البداية السريعة — مثال عملي مصغر
أنشئ ملفاً باسم app.js واتصل بقاعدة بيانات SQLite (لا تتطلب تثبيت خادم).
// استيراد Knex
const knex = require('knex');
// إعدادات الاتصال بقاعدة بيانات SQLite
const db = knex({
client: 'sqlite3', // نوع قاعدة البيانات
connection: {
filename: './mydb.sqlite' // مسار ملف قاعدة البيانات
},
useNullAsDefault: true // موصى به لـ SQLite
});
// دالة غير متزامنة للتوضيح
async function main() {
// 1. إنشاء جدول 'users' إذا لم يكن موجوداً
await db.schema.createTableIfNotExists('users', (table) => {
table.increments('id'); // مفتاح أساسي تلقائي الزيادة
table.string('name'); // حقل نصي
table.integer('age'); // حقل رقمي صحيح
});
// 2. إدخال بيانات
await db('users').insert({ name: 'أحمد', age: 30 });
await db('users').insert({ name: 'سارة', age: 25 });
// 3. جلب جميع السجلات
const users = await db.select('*').from('users');
console.log('جميع المستخدمين:', users);
// 4. جلب سجلات بشرط
const youngUsers = await db('users').where('age', '<', 28)