0% found this document useful (0 votes)
326 views155 pages

NodeJs بالعربي

يقدم هذا المستند مقدمة موجزة عن نود جي إس ويشرح بعض المفاهيم والميزات الأساسية لها مثل التكوين الأساسي والوحدات المدمجة واستخدام نود جي إس كخادم ويب. كما يشرح كيفية التعامل مع قواعد البيانات مثل ماي إس كيو إل ومونجو دي بي من خلال نود جي إس.

Uploaded by

Radwa Reda
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
326 views155 pages

NodeJs بالعربي

يقدم هذا المستند مقدمة موجزة عن نود جي إس ويشرح بعض المفاهيم والميزات الأساسية لها مثل التكوين الأساسي والوحدات المدمجة واستخدام نود جي إس كخادم ويب. كما يشرح كيفية التعامل مع قواعد البيانات مثل ماي إس كيو إل ومونجو دي بي من خلال نود جي إس.

Uploaded by

Radwa Reda
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 155

NodeJs

‫بالعربى‬

‫ابو حبيب الحسينى‬

Abo Habib Al_Hosiny Node.js 1


[email protected] [email protected]

Abo Habib Al_Hosiny Node.js 2


‫يا امة االسـالم فــــــجرك نورا‬
‫والروض فى ساحات مجدك اظـهرا‬
‫سحب المعالى فى سمائك امطرت‬
‫غيثا واجرت فى رحابك انـــــهرا‬
‫لبسة بها االشـــــجار ثوبا مورقا‬
‫وغدت بها الصـــحراء روضا اخضرا‬
‫سنحيـــا فى ظل الــعقيدة امــتا‬
‫مرفوعة االعالم محكــــمة العرى‬
‫فيا امة االســـــالم فجـــرك نورا‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪3‬‬


‫الفهرس‬
‫‪.................................................................................4‬الفهرس‬
‫‪............................................................................8‬مقدمة قصيرة‬
‫‪........................................................10‬مثال التكوين االساسى‬
‫‪......................10‬أمثلة على التشغيل في واجهة سطر األوامر‬
‫‪......................................11‬االستخدامات المميزة كخادم ويب‬
‫‪..............................................................13‬تحميل نود جى اس‬
‫‪...............................................................................13‬ابدء االن‬
‫‪...............................................................14‬واجهة خط األوامر‬
‫‪.............................................14‬قم بتشغيل ملف نود جى اس‬
‫‪..........................15‬ما هي الوحدة النمطية في نود جى اس ؟‬
‫‪.....................................................................16‬وحدات مدمجة‬
‫‪..................................................................16‬تضمين الوحدات‬
‫‪....................................................................16‬إنشاء الوحدات‬
‫‪..............................................................17‬قم بتضمين الوحدة‬
‫‪ HTTP............................................................................19‬وحدة‬
‫‪ HTTP.........................................................................19‬وحدة‬
‫‪......................................................19‬نود جى اس كخادم ويب‬
‫‪..........................................................21‬أضف اتش تى ام ال‬
‫‪......................................................21‬قراءة سلسلة االستعالم‬
‫‪.....................................................23‬تقسيم سلسلة االستعالم‬
‫‪................................................................25‬وحدة نظام الملفات‬
‫‪.................................25‬التحكم فى الملفات عبر نود جى اس‬
‫‪.....................................................................25‬قراءة الملفات‬
‫‪........................................................................27‬إنشاء ملفات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪4‬‬


‫‪...................................................................30‬تحديث الملفات‬
‫‪.....................................................................31‬حذف الملفات‬
‫‪..........................................................32‬إعادة تسمية الملفات‬
‫‪ URL...........................................................................33‬وحدة‬
‫‪...........................................34‬خادم الملفات فى نود جى اس‬
‫‪NPM........................................................................................37‬‬
‫‪........................................................................37‬؟‪ NPM‬ما هو‬
‫‪....................................................................37‬ما هي الحزمة؟‬
‫‪................................................................38‬قم بتنزيل الحزمة‬
‫‪.................................................................38‬باستخدام الحزمة‬
‫‪..................................................................40‬أحداث نود جى اس‬
‫‪.....................................................40‬األحداث في نود جى اس‬
‫‪......................................................................41‬وحدة األحداث‬
‫‪ EventEmitter...............................................................41‬كائن‬
‫‪............................................................42‬رفع او تحميل الملفات‬
‫‪........................................................42‬الوحدة التحميل والرفع‬
‫‪...........................................43‬الخطوة ‪ :1‬إنشاء نموذج تحميل‬
‫‪............................44‬الخطوة ‪ :2‬تحليل الملف الذي تم تحميله‬
‫‪.....................................................45‬الخطوة ‪ :3‬احفظ الملف‬
‫‪..............................................................46‬إرسال بريد إلكتروني‬
‫‪ Nodemailer................................................................47‬وحدة‬
‫‪...........................................................47‬أرسل بريدا إلكترونيا‬
‫‪......................................................48‬ارسال و استقبال متعدد‬
‫‪ HTML......................................................................49‬إرسال‬
‫‪..................................................50‬نود جى اس ماي إس كيو إل‬
‫‪.............................................50‬قاعدة بيانات ماي إس كيو إل‬
‫‪ MySQL.......................................50‬قم بتثبيت برنامج تشغيل‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪5‬‬


‫‪........................................................................51‬إنشاء اتصال‬
‫‪.................................................53‬االستعالم عن قاعدة بيانات‬
‫‪..............................................................54‬إنشاء قاعدة بيانات‬
‫‪.....................................................................................54‬مثال‬
‫‪.........................................................................55‬إنشاء جدول‬
‫‪.................................................................57‬المفتاح األساسي‬
‫‪................................................................60‬إدراج في الجدول‬
‫‪..........................................................61‬إدراج سجالت متعددة‬
‫‪.........................................................................63‬كائن النتيجة‬
‫‪.........................................................65‬الحصول على المعرف‬
‫‪...........................................................................66‬تابع ‪MySQL‬‬
‫‪.............................................................67‬االختيار من الجدول‬
‫‪......................................................................69‬اختيار األعمدة‬
‫‪.........................................................................71‬كائن النتيجة‬
‫‪........................................................................72‬كائن الحقول‬
‫‪.......................................................................75‬البحث ‪MySQL‬‬
‫‪.....................................................................75‬حدد مع مرشح‬
‫‪.........................................................................77‬أحرف البدل‬
‫‪...............................................78‬االثتثناءات من قيم االستعالم‬
‫‪..........................................................................81‬فرز النتيجة‬
‫‪.........................................................83‬الطلب حسب الوصف‬
‫‪.........................................................................85‬حذف جدول‬
‫‪................................................87‬حذف فقط إذا كان موجودا‬
‫‪....................................................................89‬تحديث الجدول‬
‫‪.........................................................................91‬كائن النتيجة‬
‫‪...................................................................92‬الحد من النتيجة‬
‫‪...................................................94‬ابدأ البحث من موضع آخر‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪6‬‬


‫‪...................................................................96‬بناء جملة أقصر‬
‫‪.............................................................98‬ضم جدولين أو أكثر‬
‫‪.................................................................101‬االنضمام األيسر‬
‫‪...............................................................102‬االنضمام الصحيح‬
‫‪ MongoDB.........................................................103‬نود جى اس‬
‫‪........................................................103‬قواعد بيانات ‪MongoDB‬‬
‫‪ MongoDB........................................103‬تثبيت برنامج تشغيل‬
‫‪.........................................................105‬إنشاء قاعدة البيانات‬
‫‪..................................................................107‬إنشاء مجموعة‬
‫‪..........................................................108‬إدراج في المجموعة‬
‫‪.....................................................110‬إدراج مستندات متعددة‬
‫‪.......................................................................113‬كائن النتيجة‬
‫‪ _id...........................................................................115‬الحقل‬
‫‪...........................................................118‬ابحث عن ناتج واحد‬
‫‪.................................................................119‬اوجد كل النتائج‬
‫‪............................................................................122‬جد بعض‬
‫‪.......................................................................128‬كائن النتيجة‬
‫‪ MongoDB..............................................................128‬استعالم‬
‫‪....................................................................129‬تصفية النتيجة‬
‫‪...............................................130‬تصفية مع التعبيرات العادية‬
‫‪............................................................132‬طريقة فرز النتيجة‬
‫‪.....................................................................135‬ترتيب تنازلي‬
‫‪...............................................................139‬حذف المجموعة‬
‫‪db.dropCollection..............................................................140‬‬
‫‪ MongoDB................................................................142‬تحديث‬
‫‪...................................................................142‬تحديث الوثيقة‬
‫‪.............................................144‬تحديث حقول المحددة فقط‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪7‬‬


‫‪...........................................145‬تحديث العديد من المستندات‬
‫‪.......................................................................146‬كائن النتيجة‬
‫‪..........................................................147‬الحد من عدد النتائج‬
‫‪................................................................151‬ضم المجموعات‬

‫مقدمة قصيرة‬
‫بسم اهلل الرحمن الرحيم‬
‫النود جى اس بختصار هو اطار عمل مجانى مفتوح المصدر تمت كتابة‬
‫بلغة السي بالص يعمل على جميع المنصات واالنظمة المختلفة مثل‬
‫ويندوذ ولينكس وماك وغيرها متعدد االستخدامات وهذا االطار بمثابة‬
‫استقالليه لجافاسربت ومن مميزات نود جى اس تصنيفة بانة اسرع‬
‫ريكويست فى العالم يصل الى ‪ 600‬ريكويست فى الثانية وهذا اسرع من‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪8‬‬


‫بى اتش بى عشر مرات وايضا صنف مستودع حزم ان بى ام الذى يخدم‬
‫نود جى اس انه اكبر مستودع حزمة برجية فى العالم وهذا يرجع الى شهرة‬
‫جافا سكربت وعدد مستخدميها الذى ال حصر له حتى على موقع الجيت‬
‫هاب جافا سكربت هى االولى عالميا فقد تخطة مشاريع جافاسكربت على‬
‫موقع الجيت هاب ‪ 2‬مليون لتصبح جافاسكربت فى المركز االول عالميا‬
‫من حيث عدد المشاريع ثم تاتى بى اتش بى فى المركز الثانى بمجموعة‬
‫مشاريع مليون وكسور فاذا دخلت على موقع الجيت هاب وكتب فى خانة‬
‫البحث جافاسكربت فستجد الرقم الرهيب لعدد المستودعات الذى تحطى‬
‫‪ 2‬مليون وهو اكبر عدد موجود حتى االن و فى اذدياد مستمر ومن مميزات‬
‫النود جى اس ايضا انك تستطيع استخدام جافاسكربت خارج المتصفخ‬
‫مثل اى لغة برمجة عادية تنشا تطبيقات النظمة التشغيل المختلفة سواء‬
‫موبايل او كمبيوتر وايضا تستطيع دمج تقنيات الويب العادية من اتش تى‬
‫ام ال وسي اس اس والمكتبات المعروفة مثل الجيكويرى وغيرها فى‬
‫مشاريعك على انظمة التشغيل المختلفة وايضا من المميزات الرهيب لهذا‬
‫االطار ان كود جافا سكربت ثابت على كل انظمة التشغيل التى تقوم‬
‫بنشاء تطبيقات لها على خالاف اللغات االخرى التى تعتمد لكل نظام‬
‫تشغيل مكتبات خاصة به التى يجب ان تستدعيها لتعمل عليها مما‬
‫يجعل االمر معقد للغاية ناهيك على ان نود جى اس فى االساس هو بيئة‬
‫خادم مفتوحة المصدر‪ .‬يسمح لك بتشغيل جافاسكربت على الخادم لتعمل‬
‫مثل بى اتش بى تمام‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪9‬‬


‫مثال التكوين االساسى‬
‫هذا مثال لتكوين السيرفر االساسى الذى ستعمل علية نالحظ ان الكود قصير جدا‬
‫وهذا ايضا من مميزات هذا اطار انه يختصر االكواد‬

‫مثال‬
‫;)'‪var http = require('http‬‬

‫{ )‪http.createServer(function (req, res‬‬


‫;)}'‪res.writeHead(200, {'Content-Type': 'text/plain‬‬
‫;)! ‪res.end('Abo Habib Al_Hosiny‬‬
‫;)‪}).listen(8080‬‬

‫أمثلة على التشغيل في واجهة سطر‬


‫األوامر‬
‫في هذا الكتاب ‪ ،‬ستكون هناك بعض األمثلة التي سيتم شرحها بشكل أفضل من‬
‫‪.‬خالل عرض النتيجة في واجهة سطر األوامر‬
‫عندما يحدث ذلك‪ ،‬ستعرض أداة "اظهار نود جى اس " النتيجة في شاشة‬
‫‪:‬سوداء على اليمين‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪10‬‬


‫مثال‬
‫;)'! ‪console.log('Abo Habib Al_Hosiny‬‬
‫‪console.log('The result is displayed in the Command‬‬
‫;)'‪Line Interface‬‬

‫االستخدامات المميزة كخادم ويب‬


‫يستخدم برمجة غير متزامنة! و‬

‫يمكن أن تكون المهمة الشائعة لخادم الويب هي فتح ملف على الخادم وإعادة‬
‫المحتوى إلى العميل‪ .‬وهذا يتم فى سرعة كبيرة جدا مقارنتا بالخوادم االخرى‬
‫‪:‬مع طلب الملف ‪ ASP‬أو ‪ PHP‬إليك كيفية تعامل‬
‫‪.‬يرسل المهمة إلى نظام ملفات الكمبيوتر‪1.‬‬
‫‪.‬ينتظر بينما يفتح نظام الملفات ويقرأ الملف‪2.‬‬
‫‪.‬إرجاع المحتوى إلى العميل‪3.‬‬
‫‪.‬على استعداد للتعامل مع الطلب التالي‪4.‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪11‬‬


‫‪:‬إليك كيفية تعامل نود جى اس مع طلب الملف‬

‫‪.‬يرسل المهمة إلى نظام ملفات الكمبيوتر‪1.‬‬


‫‪.‬على استعداد للتعامل مع الطلب التالي‪2.‬‬
‫عندما يقوم نظام الملفات بفتح الملف وقراءته‪ ،‬يقوم الخادم بإرجاع ‪3.‬‬
‫‪.‬المحتوى إلى العميل‬
‫دمج اكواد الباكاند مع الفرونت اند وهذا ما لم تستطع فعلة فى ‪4.‬‬
‫الخوادم االخرى‬
‫‪.‬يزيل االنتظار‪ ،‬ويستمر ببساطة في الطلب التالي‬

‫يقوم بتشغيل برمجة أحادية الترابط وغير محظورة وغير متزامنة‪ ،‬وهي فعالة‬
‫‪.‬وسريعة ج ًدا في استخدام الذاكرة‬
‫يمكن لـ نود جى اس إنشاء محتوى صفحة ديناميكي•‬
‫يمكن لـ نود جى اس إنشاء الملفات وفتحها وقراءتها وكتابتها وحذفها •‬
‫وإغالقها على الخادم‬
‫يمكن لـ نود جى اس جمع بيانات النموذج•‬
‫يمكن لـ نود جى اس إضافة أو حذف أو تعديل البيانات في قاعدة •‬
‫البيانات‬

‫تحتوي ملفات على المهام التي سيتم تنفيذها في أحداث معينة•‬


‫الحدث النموذجي هو شخص يحاول الوصول إلى منفذ على الخادم•‬
‫يجب أن يتم تشغيل ملفات على الخادم قبل أن يكون لها أي تأثير•‬
‫"‪ ".js‬ملفات لها االمتداد•‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪12‬‬


‫تحميل نود جى اس‬
‫يحتوي الموقع الرسمي على تعليمات تثبيت نود جى اس‬
: https://nodejs.org

‫ابدء االن‬
‫ فلنحاول عرض‬،‫بمجرد قيامك بتنزيل وتثبيته على جهاز الكمبيوتر الخاص بك‬
"Abo Habib Al_Hosiny !" ‫في متصفح الويب‬.

‫" أنشئ ملف نود جى اس باسم‬file_Abo_Habib.js"، ‫وأضف الكود‬


‫التالي‬:

file_Abo_Habib.js

var http = require('http');

http.createServer(function (req, res) {


res.writeHead(200, {'Content-Type': 'text/html'});
res.end('Abo Habib Al_Hosiny !);
}).listen(8080);

Abo Habib Al_Hosiny Node.js 13


‫‪:‬احفظ الملف على جهاز الكمبيوتر الخاص بك‬
‫‪C:\Users\ Your Name \file_Abo_Habib.js‬‬
‫إذا "!! ‪ "Abo Habib Al_Hosiny‬يطلب الكود من الكمبيوتر أن يكتب‬
‫حاول أي شخص (مثل متصفح الويب) الوصول إلى جهاز الكمبيوتر الخاص بك‬
‫‪.‬على المنفذ ‪8080‬‬
‫‪.‬في الوقت الحالي‪ ،‬ليس عليك فهم الكود‪ .‬سيتم شرحه الحقا‬

‫واجهة خط األوامر‬
‫‪ "Command Line‬يجب أن يتم تشغيل ملفات نود جى اس في برنامج‬
‫‪.‬بجهاز الكمبيوتر الخاص بك "‪Interface‬‬
‫تعتمد كيفية فتح واجهة سطر األوامر على جهاز الكمبيوتر الخاص بك على نظام‬
‫اضغط على زر البداية وابحث عن ‪ Windows،‬التشغيل‪ .‬بالنسبة لمستخدمي‬
‫‪.‬في حقل البحث "‪" "cmd‬موجه األوامر"‪ ،‬أو ببساطة اكتب‬
‫يجب ‪ "file_Abo_Habib.js"،‬انتقل إلى المجلد الذي يحتوي على الملف‬
‫‪:‬أن تبدو نافذة واجهة سطر األوامر كما يلي‬

‫_>‪C:\Users\Your Name‬‬

‫قم بتشغيل ملف نود جى اس‬


‫يجب أن يتم تشغيل الملف الذي قمت بإنشائه للتو بواسطة نود جى اس قبل‬
‫‪.‬اتخاذ أي إجراء‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪14‬‬


‫ثم اضغط ‪ node file_Abo_Habib.js‬ابدأ واجهة سطر األوامر‪ ،‬ثم اكتب‬
‫‪:‬على زر اإلدخال‬

‫‪ "file_Abo_Habib.js":‬بدء‬

‫‪C:\Users\Your Name>node file_Abo_Habib.js‬‬

‫!اآلن‪ ،‬جهاز الكمبيوتر الخاص بك يعمل كخادم‬


‫إذا حاول أي شخص الوصول إلى جهاز الكمبيوتر الخاص بك عبر المنفذ ‪،8080‬‬
‫رسالة في "!! ‪ "Abo Habib Al_Hosiny‬فسوف يحصل على رسالة‬
‫!المقابل‬
‫‪:‬قم بتشغيل متصفح اإلنترنت الخاص بك‪ ،‬واكتب العنوان‬
‫‪http://localhost:8080‬‬

‫وحدات نود جى اس‬

‫ما هي الوحدة النمطية في نود جى اس ؟‬


‫‪.‬ضع في اعتبارك أن الوحدات النمطية هي نفس مكتبات جافاسكربت‬
‫‪.‬مجموعة من الوظائف التي تريد تضمينها في التطبيق الخاص بك‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪15‬‬


‫وحدات مدمجة‬
‫يحتوي نود جى اس على مجموعة من الوحدات المضمنة التي يمكنك‬
‫‪.‬استخدامها دون أي تثبيت إضافي‬
‫‪.‬لدينا للحصول على قائمة كاملة بالوحدات‬

‫تضمين الوحدات‬
‫‪:‬الدالة التي تحمل اسم الوحدة )(‪ require‬لتضمين وحدة‪ ،‬استخدم‬

‫;)'‪var http = require('http‬‬

‫قادرا على إنشاء ‪ HTTP،‬اآلن أصبح لتطبيقك حق الوصول إلى وحدة‬


‫وأصبح ً‬
‫‪:‬خادم‬

‫{ )‪http.createServer(function (req, res‬‬


‫;)}'‪res.writeHead(200, {'Content-Type': 'text/html‬‬
‫;)! ‪res.end('Abo Habib Al_Hosiny‬‬
‫;)‪}).listen(8080‬‬

‫إنشاء الوحدات‬
‫‪.‬يمكنك إنشاء الوحدات النمطية وإدراجها بسهولة في تطبيقاتك‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪16‬‬


‫‪:‬يقوم المثال التالي بإنشاء وحدة تقوم بإرجاع كائن التاريخ والوقت‬

‫مثال‬

‫‪:‬قم بإنشاء وحدة تقوم بإرجاع التاريخ والوقت الحاليين‬

‫{ )( ‪exports.myDateTime = function‬‬
‫;)(‪return Date‬‬
‫;}‬

‫الكلمة األساسية لتوفير الخصائص واألساليب خارج ملف ‪ exports‬استخدم‬


‫‪.‬الوحدة النمطية‬
‫"‪ "Module_Abo_Habib.js‬احفظ الكود أعاله في ملف يسمى‬

‫قم بتضمين الوحدة‬


‫‪ .‬يمكنك اآلن تضمين الوحدة واستخدامها في أي من ملفات نود جى اس‬

‫مثال‬

‫‪ :‬في ملف نود جى اس "‪ "Module_Abo_Habib‬استخدم الوحدة‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪17‬‬


var http = require('http');
var dt = require('./Module_Abo_Habib');

http.createServer(function (req, res) {


res.writeHead(200, {'Content-Type': 'text/html'});
res.write("The date and time are currently:
" + dt.myDateTime());
res.end();
}).listen(8080);

‫ وهذا يعني أن الوحدة موجودة في نفس‬،‫لتحديد موقع الوحدة‬/. ‫الحظ أننا نستخدم‬
‫ المجلد مثل ملف نود جى اس‬.
‫" احفظ الكود أعاله في ملف يسمى‬Habib_module.js"، ‫وابدأ الملف‬:

‫ بدء‬Habib_module.js:

C:\Users\Your Name>node Habib_module.js

‫ فسوف ترى‬،‫إذا قمت بإتباع نفس الخطوات على جهاز الكمبيوتر الخاص بك‬
‫نفس النتيجة كما في المثال‬:
http://localhost:8080

Abo Habib Al_Hosiny Node.js 18


‫‪ HTTP‬وحدة‬

‫‪ HTTP‬وحدة‬
‫والتي تسمح لـ نود ‪ HTTP،‬يحتوي نود جى اس على وحدة مدمجة تسمى‬
‫‪ (HTTP).‬جى اس بنقل البيانات عبر بروتوكول نقل النص التشعبي‬
‫‪:‬الطريقة)(‪ require‬استخدم ‪ HTTP،‬لتضمين وحدة‬

‫;)'‪var http = require('http‬‬

‫نود جى اس كخادم ويب‬


‫يستمع إلى منافذ الخادم ويعطي ‪ HTTP‬إنشاء خادم ‪ HTTP‬يمكن لوحدة‬
‫‪.‬استجابة للعميل‬
‫‪ HTTP:‬الطريقة إلنشاء خادم)(‪ createServer‬استخدم‬

‫مثال‬
‫;)'‪var http = require('http‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪19‬‬


//create a server object:
http.createServer(function (req, res) {
res.write('Abo Habib Al_Hosiny !); //write a
response to the client
res.end(); //end the response
}).listen(8080); //the server object listens on port
8080

http.createServer() ‫سيتم تنفيذ الوظيفة التي تم تمريرها إلى الطريقة‬


8080 ‫عندما يحاول شخص ما الوصول إلى الكمبيوتر على المنفذ‬.
‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_http.js"، ‫ثم ابدأ الملف‬:

‫بدء المثال‬

C:\Users\Your Name>node Abo_Habib_http.js

‫ فسوف ترى‬،‫إذا قمت بإتباع نفس الخطوات على جهاز الكمبيوتر الخاص بك‬
‫نفس النتيجة كما في المثال‬:
http://localhost:8080

Abo Habib Al_Hosiny Node.js 20


‫أضف اتش تى ام ال‬
‫بتنسيق ‪ HTTP‬إذا كان من المفترض أن يتم عرض االستجابة من خادم‬
‫‪:‬بنوع المحتوى الصحيح ‪ HTTP‬فيجب عليك تضمينرأس ‪HTML،‬‬

‫مثال‬
‫;)'‪var http = require('http‬‬
‫{ )‪http.createServer(function (req, res‬‬
‫;)}'‪res.writeHead(200, {'Content-Type': 'text/html‬‬
‫;)! ‪res.write('Abo Habib Al_Hosiny‬‬
‫;)(‪res.end‬‬
‫;)‪}).listen(8080‬‬

‫هي رمز الحالة‪ 200 ،‬يعني أن كل )(‪ res.writeHead‬الوسيطة األولى للطريقة‬


‫‪.‬شيء على ما يرام‪ ،‬والوسيطة الثانية هي كائن يحتوي على رؤوس االستجابة‬

‫قراءة سلسلة االستعالم‬


‫وسيطة تمثل‪ req‬تحتوي الدالة التي تم تمريرها إلى )(‪http.createServer‬‬
‫‪ http.IncomingMessage).‬كائن( الطلب من العميل‪ ،‬ككائن‬
‫والتي تحتوي على جزء عنوان "‪ "url‬يحتوي هذا الكائن على خاصية تسمى‬
‫‪:‬الذي يأتي بعد اسم المجال ‪url‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪21‬‬


Abo_Habib_http_url.js

var http = require('http');


http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(req.url);
res.end();
}).listen(8080);

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_http_url.js" ‫وابدأ‬


‫الملف‬:

‫بدء المثال‬

C:\Users\Your Name>node Abo_Habib_http_url.js

‫ فيجب أن ترى‬،‫إذا اتبعت نفس الخطوات على جهاز الكمبيوتر الخاص بك‬
‫نتيجتين مختلفتين عند فتح هذين العنوانين‬:
http://localhost:8080/summer

‫سوف تنتج هذه النتيجة‬:

/summer

Abo Habib Al_Hosiny Node.js 22


http://localhost:8080/winter

‫سوف تنتج هذه النتيجة‬:

/winter

‫تقسيم سلسلة االستعالم‬


،‫توجد وحدات مدمجة لتقسيم سلسلة االستعالم بسهولة إلى أجزاء قابلة للقراءة‬
‫ مثل وحدة‬URL.

‫مثال‬

‫قم بتقسيم سلسلة االستعالم إلى أجزاء قابلة للقراءة‬:

var http = require('http');


var url = require('url');

http.createServer(function (req, res) {


res.writeHead(200, {'Content-Type': 'text/html'});
var q = url.parse(req.url, true).query;
var txt = q.year + " " + q.month;

Abo Habib Al_Hosiny Node.js 23


res.end(txt);
}).listen(8080);

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_querystring.js" ‫وابدأ‬


‫الملف‬:

‫ بدء‬Abo_Habib_querystring.js:

C:\Users\Your Name>node
Abo_Habib_querystring.js

‫العنوان‬:
http://localhost:8080/?year=2017&month=July

‫سوف تنتج هذه النتيجة‬:

2017 July

Abo Habib Al_Hosiny Node.js 24


‫وحدة نظام الملفات‬

‫التحكم فى الملفات عبر نود جى اس‬


‫تسمح لك وحدة نظام الملفات نود جى اس بالعمل مع نظام الملفات على‬
‫‪.‬جهاز الكمبيوتر الخاص بك‬
‫‪:‬الطريقة)(‪ require‬لتضمين وحدة نظام الملفات‪ ،‬استخدم‬

‫;)'‪var fs = require('fs‬‬

‫‪:‬االستخدام الشائع لوحدة نظام الملفات‬


‫قراءة الملفات•‬
‫إنشاء ملفات•‬
‫تحديث الملفات•‬
‫حذف الملفات•‬
‫إعادة تسمية الملفات•‬
‫وغير الكثير والكثير من اجرائات الملفات•‬

‫قراءة الملفات‬
‫لقراءة الملفات الموجودة على جهاز )(‪ fs.readFile‬يتم استخدام الطريقة‬
‫‪.‬الكمبيوتر الخاص بك‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪25‬‬


‫ افترض أن لدينا ملف‬HTML ‫التالي (الموجود في نفس المجلد مثل نود جى‬
) ‫اس‬:

Abo_Habib_File.html

<html>
<body>
<h1>My Header</h1>
<p>My paragraph.</p>
</body>
</html>

‫ أنشئ ملف نود جى اس الذي يقرأ ملف‬HTML، ‫ويعيد المحتوى‬:

‫مثال‬
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
fs.readFile('Abo_Habib_File.html', function(err,
data) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8080);

Abo Habib Al_Hosiny Node.js 26


‫وابدأ ‪ "Abo_Habib_readfile.js"،‬احفظ الكود أعاله في ملف يسمى‬
‫‪:‬الملف‬

‫‪ Abo_Habib_readfile.js:‬بدء‬

‫‪C:\Users\Your Name>node Abo_Habib_readfile.js‬‬

‫إذا قمت بإتباع نفس الخطوات على جهاز الكمبيوتر الخاص بك‪ ،‬فسوف ترى‬
‫‪:‬نفس النتيجة كما في المثال‬
‫‪http://localhost:8080‬‬

‫إنشاء ملفات‬
‫‪:‬تحتوي وحدة نظام الملفات على طرق إلنشاء ملفات جديدة‬
‫)(‪•fs.appendFile‬‬
‫)(‪•fs.open‬‬
‫)(‪•fs.writeFile‬‬
‫بإلحاق محتوى محدد بملف‪ .‬إذا كان الملف )(‪ fs.appendFile‬تقوم الطريقة‬
‫‪:‬غير موجود‪ ،‬سيتم إنشاء الملف‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪27‬‬


‫مثال‬

‫ قم بإنشاء ملف جديد باستخدام طريقة‬appendFile():

var fs = require('fs');

fs.appendFile('Abo_Habib_File1.txt', 'Hello
content!', function (err) {
if (err) throw err;
console.log('Saved!');
});

‫ تأخذ الطريقة‬fs.open()"‫ إذا كانت العالمة‬،‫" عالمة" كوسيطة ثانية‬w" ‫لـ‬


‫ يتم‬،‫ إذا كان الملف غير موجود‬.‫ فسيتم فتح الملف المحدد للكتابة‬،"‫"الكتابة‬
‫إنشاء ملف فارغ‬:

‫مثال‬

‫ قم بإنشاء ملف جديد فارغ باستخدام طريقة‬open() :

var fs = require('fs');

fs.open('Abo_Habib_File2.txt', 'w', function (err, file)

Abo Habib Al_Hosiny Node.js 28


{
if (err) throw err;
console.log('Saved!');
});

‫ تستبدل الطريقة‬fs.writeFile() ‫الملف والمحتوى المحددين إذا كان‬


‫ سيتم إنشاء ملف جديد يحتوي على‬،‫ في حالة عدم وجود الملف‬.‫موجودا‬
ً
‫المحتوى المحدد‬:

‫مثال‬

‫ قم بإنشاء ملف جديد باستخدام طريقة‬writeFile():

var fs = require('fs');

fs.writeFile('Abo_Habib_File3.txt', 'Hello
content!', function (err) {
if (err) throw err;
console.log('Saved!');
});

Abo Habib Al_Hosiny Node.js 29


‫تحديث الملفات‬
‫تحتوي وحدة نظام الملفات على طرق لتحديث الملفات‬:
•fs.appendFile()
•fs.writeFile()
‫ تُلحق الطريقة‬fs.appendFile()‫المحتوى المحدد في نهاية الملف المحدد‬:

‫مثال‬

‫" إلى نهاية الملف‬.‫إلحاق "هذا هو النص الخاص بي‬


"Abo_Habib_File1.txt":

var fs = require('fs');

fs.appendFile('Abo_Habib_File1.txt', ' This is my


text.', function (err) {
if (err) throw err;
console.log('Updated!');
});

‫ تستبدل الطريقة‬fs.writeFile()‫الملف والمحتوى المحددين‬:

Abo Habib Al_Hosiny Node.js 30


‫مثال‬

‫" استبدال محتوى الملف‬Abo_Habib_File3.txt":

var fs = require('fs');

fs.writeFile('Abo_Habib_File3.txt', 'This is my
text', function (err) {
if (err) throw err;
console.log('Replaced!');
});

‫حذف الملفات‬
‫ استخدم‬،‫ لحذف ملف باستخدام وحدة نظام الملفات‬fs.unlink() ‫الطريقة‬.
‫ الطريقة‬fs.unlink()‫تحذف الملف المحدد‬:

‫مثال‬

‫" حذف‬Abo_Habib_File2.txt":

Abo Habib Al_Hosiny Node.js 31


var fs = require('fs');

fs.unlink('Abo_Habib_File2.txt', function (err) {


if (err) throw err;
console.log('File deleted!');
});

‫إعادة تسمية الملفات‬


،‫إلعادة تسمية ملف باستخدام وحدة نظام الملفات‬
‫ استخدم‬fs.rename() ‫الطريقة‬.
‫ تقوم الطريقة‬fs.rename()‫بإعادة تسمية الملف المحدد‬:

‫مثال‬

‫" إعادة تسمية‬Abo_Habib_File1.txt" ‫" إلى‬Al_Hosiny_File.txt":

var fs = require('fs');

fs.rename('Abo_Habib_File1.txt', 'Al_Hosiny_File.txt'
, function (err) {
if (err) throw err;

Abo Habib Al_Hosiny Node.js 32


‫;)'!‪console.log('File Renamed‬‬
‫;)}‬

‫لـ نود جى اس ‪ URL‬وحدة الرابط‬

‫‪ URL‬وحدة‬
‫‪.‬بتقسيم عنوان الويب إلى أجزاء قابلة للقراءة ‪ URL‬تقوم وحدة‬
‫‪:‬الطريقة )(‪ require‬استخدم ‪ URL،‬لتضمين وحدة‬

‫;)'‪var url = require('url‬‬

‫مع كل ‪ URL‬الطريقة‪ ،‬وستعيد كائن )(‪ url.parse‬قم بتحليل عنوان باستخدام‬


‫‪:‬جزء من العنوان كخصائص‬

‫مثال‬

‫‪:‬تقسيم عنوان الويب إلى أجزاء قابلة للقراءة‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪33‬‬


var url = require('url');
var adr = 'http://localhost:8080/Al_Hosiny.htm?
year=2017&month=february';
var q = url.parse(adr, true);

console.log(q.host); //returns 'localhost:8080'


console.log(q.pathname); //returns '/Al_Hosiny.htm'
console.log(q.search); //returns '?
year=2017&month=february'

var qdata = q.query; //returns an object: { year: 2017,


month: 'february' }
console.log(qdata.month); //returns 'february'

‫خادم الملفات فى نود جى اس‬


‫ وفي الفصل السابق تعلمنا‬،‫اآلن نحن نعرف كيفية تحليل سلسلة االستعالم‬
‫ دعونا نجمع بين االثنين ونخدم‬.‫كيفية جعل نود جى اس يعمل كخادم ملفات‬
‫الملف الذي طلبه العميل‬.

‫ قم بإنشاء ملفين بتنسيق‬html ‫واحفظهما في نفس المجلد مثل ملفات نود جى‬
‫ اس‬.

Summer.html

Abo Habib Al_Hosiny Node.js 34


<!DOCTYPE html>
<html>
<body>
<h1>Summer</h1>
<p>I love the sun!</p>
</body>
</html>

Winter.html

<!DOCTYPE html>
<html>
<body>
<h1>Winter</h1>
<p>I love the snow!</p>
</body>
</html>

‫قم بإنشاء ملف نود جى اس الذي يفتح الملف المطلوب ويعيد المحتوى إلى‬
404 ‫ قم بإلقاء خطأ‬،‫ إذا حدث أي خطأ‬.‫العميل‬:

Abo_Habib_fileserver.js:

Abo Habib Al_Hosiny Node.js 35


var http = require('http');
var url = require('url');
var fs = require('fs');

http.createServer(function (req, res) {


var q = url.parse(req.url, true);
var filename = "." + q.pathname;
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8080);

‫تذكر أن تبدأ الملف‬:

‫ بدء‬Abo_Habib_fileserver.js:

C:\Users\Your Name>node Abo_Habib_fileserver.js

‫ فيجب أن ترى‬،‫إذا اتبعت نفس الخطوات على جهاز الكمبيوتر الخاص بك‬
‫نتيجتين مختلفتين عند فتح هذين العنوانين‬:

Abo Habib Al_Hosiny Node.js 36


‫‪NPM‬‬

‫؟‪ NPM‬ما هو‬


‫‪.‬هو مدير حزم لحزم نود جى اس ‪ ،‬أو الوحدات النمطية إذا أردت ‪NPM‬‬
‫‪.‬آالف الحزم المجانية للتنزيل واالستخدام ‪ www.npmjs.com‬يستضيف‬
‫على جهاز الكمبيوتر الخاص بك عند تثبيت نود جى ‪ NPM‬يتم تثبيت برنامج‬
‫اس‬

‫!جاهز بالفعل للتشغيل على جهاز الكمبيوتر الخاص بك ‪NPM‬‬

‫ما هي الحزمة؟‬
‫تحتوي الحزمة الموجودة في نود جى اس على كافة الملفات التي تحتاجها‬
‫‪.‬للوحدة النمطية‬
‫‪.‬يمكنك تضمينها في مشروعك ‪ JavaScript‬الوحدات هي مكتبات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪37‬‬


‫قم بتنزيل الحزمة‬
‫‪.‬تنزيل الحزمة سهل للغاية‬
‫‪.‬تنزيل الحزمة التي تريدها ‪ NPM‬افتح واجهة سطر األوامر واطلب من‬

‫‪":‬أريد تنزيل حزمة تسمى "األحرف الكبيرة‬

‫‪C:\Users\Your Name>npm install upper-case‬‬

‫! لقد قمت اآلن بتنزيل وتثبيت الحزمة األولى‬


‫حيث سيتم وضع ‪ "node_modules"،‬بإنشاء مجلد باسم ‪ NPM‬يقوم‬
‫الحزمة‪ .‬سيتم وضع جميع الحزم التي تقوم بتثبيتها في المستقبل في هذا‬
‫‪.‬المجلد‬
‫‪:‬يحتوي مشروعي اآلن على بنية مجلد مثل هذا‬
‫‪C:\Users\My Name\node_modules\upper-case‬‬

‫باستخدام الحزمة‬
‫‪.‬بمجرد تثبيت الحزمة‪ ،‬فهي جاهزة لالستخدام‬
‫قم بتضمين الحزمة "ذات األحرف الكبيرة" بنفس الطريقة التي تقوم بها بتضمين‬
‫‪:‬أي وحدة أخرى‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪38‬‬


var uc = require('upper-case');

‫" قم بإنشاء ملف نود جى اس الذي سيقوم بتحويل اإلخراج‬Abo Habib


Al_Hosiny !!" ‫إلى أحرف كبيرة‬:

‫مثال‬
var http = require('http');
var uc = require('upper-case');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(uc.upperCase("Abo Habib Al_Hosiny !!"));
res.end();
}).listen(8080);

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_uppercase.js"، ‫وابدأ‬


‫الملف‬:

‫بدء المثال لألحرف الكبيرة‬:

C:\Users\Your Name>node Abo_Habib_uppercase.js

‫ فسوف ترى‬،‫إذا قمت بإتباع نفس الخطوات على جهاز الكمبيوتر الخاص بك‬
‫نفس النتيجة كما في المثال‬:
http://localhost:8080

Abo Habib Al_Hosiny Node.js 39


‫أحداث نود جى اس‬

‫‪.‬نود جى اس مثالي للتطبيقات التي تعتمد على األحداث‬

‫األحداث في نود جى اس‬


‫كل إجراء على جهاز الكمبيوتر هو حدث‪ .‬كما هو الحال عند إجراء اتصال أو فتح‬
‫‪.‬ملف‬

‫يمكن للكائنات في نود جى اس إطالق األحداث‪ ،‬مثل إطالق كائن‬


‫‪:‬األحداث عند فتح ملف وإغالقه ‪readStream‬‬

‫مثال‬
‫;)'‪var fs = require('fs‬‬
‫;)'‪var rs = fs.createReadStream('./Abo_Habib_File.txt‬‬
‫{ )( ‪rs.on('open', function‬‬
‫;)'‪console.log('The file is open‬‬
‫;)}‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪40‬‬


‫وحدة األحداث‬
‫يحتوي نود جى اس على وحدة مدمجة‪ ،‬تسمى األحداث‪ ،‬حيث يمكنك إنشاء‬
‫‪.‬األحداث وتشغيلها واالستماع إليها‬
‫الطريقة‪ .‬باإلضافة إلى )(‪ require‬لتضمين وحدة األحداث المضمنة‪ ،‬استخدم‬
‫ذلك‪ ،‬جميع خصائص الحدث واألساليب هي مثيل لكائن‬
‫لتتمكن من الوصول إلى هذه الخصائص واألساليب‪ ،‬قم ‪EventEmitter.‬‬
‫‪ EventEmitter:‬بإنشاء كائن‬

‫;)'‪var events = require('events‬‬


‫;)(‪var eventEmitter = new events.EventEmitter‬‬

‫‪ EventEmitter‬كائن‬
‫‪ EventEmitter.‬يمكنك تعيين معالجات األحداث لألحداث باستخدام كائن‬

‫‪".‬في المثال أدناه قمنا بإنشاء دالة سيتم تنفيذها عند إطالق حدث "الصراخ‬
‫‪.‬الطريقة)(‪ emit‬إلطالق حدث ما‪ ،‬استخدم‬

‫مثال‬
‫;)'‪var events = require('events‬‬
‫;)(‪var eventEmitter = new events.EventEmitter‬‬

‫‪//Create an event handler:‬‬


‫{ )( ‪var myEventHandler = function‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪41‬‬


console.log('I hear a scream!');
}

//Assign the event handler to an event:


eventEmitter.on('scream', myEventHandler);

//Fire the 'scream' event:


eventEmitter.emit('scream');

‫رفع او تحميل الملفات‬

‫الوحدة التحميل والرفع‬


‫" هناك وحدة جيدة ج ًدا للعمل مع تحميل الملفات تسمى‬Formidable".
‫ يمكن تنزيل الوحدة‬Formidable ‫ وتثبيتها باستخدام‬NPM:

C:\Users\Your Name>npm install formidable

‫ بعد قيامك بتنزيل وحدة‬Formidable، ‫يمكنك تضمين الوحدة في أي تطبيق‬:

var formidable = require('formidable');

Abo Habib Al_Hosiny Node.js 42


‫أنت اآلن جاهز إلنشاء صفحة ويب في نود جى اس تتيح للمستخدم تحميل‬
‫الملفات إلى جهاز الكمبيوتر الخاص بك‬:

‫ إنشاء نموذج تحميل‬:1 ‫الخطوة‬


‫ قم بإنشاء ملف نود جى اس الذي سيرفع الملف‬HTML، ‫مع حقل التحميل‬:

‫مثال‬

‫ سينتج عن هذا الكود نموذج‬HTML:

var http = require('http');

http.createServer(function (req, res) {


res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="fileupload"
method="post" enctype="multipart/form-data">');
res.write('<input type="file"
name="filetoupload"><br>');
res.write('<input type="submit">');
res.write('</form>');
return res.end();
}).listen(8080);

Abo Habib Al_Hosiny Node.js 43


‫ تحليل الملف الذي تم تحميله‬:2 ‫الخطوة‬
‫ قم بتضمين الوحدة‬Formidable ‫لتتمكن من تحليل الملف الذي تم تحميله‬
‫بمجرد وصوله إلى الخادم‬.
‫ يتم وضعه في مجلد مؤقت على جهاز‬،‫عندما يتم تحميل الملف وتحليله‬
‫الكمبيوتر الخاص بك‬.

‫مثال‬

‫سيتم تحميل الملف ووضعه في مجلد مؤقت‬:

var http = require('http');


var formidable = require('formidable');

http.createServer(function (req, res) {


if (req.url == '/fileupload') {
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
res.write('File uploaded');
res.end();
});
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="fileupload"
method="post" enctype="multipart/form-data">');
res.write('<input type="file"
name="filetoupload"><br>');

Abo Habib Al_Hosiny Node.js 44


‫;)'>"‪res.write('<input type="submit‬‬
‫;)'>‪res.write('</form‬‬
‫;)(‪return res.end‬‬
‫}‬
‫;)‪}).listen(8080‬‬

‫الخطوة ‪ :3‬احفظ الملف‬


‫‪.‬عندما يتم تحميل الملف بنجاح إلى الخادم‪ ،‬يتم وضعه في مجلد مؤقت‬
‫يمكن العثور على المسار إلى هذا الدليل في كائن "الملفات"‪ ،‬الذي تم تمريره‬
‫‪.‬وظيفة رد االتصال الخاصة باألسلوب)(‪ parse‬كوسيطة ثالثة في‬
‫لنقل الملف إلى المجلد الذي تختاره‪ ،‬استخدم وحدة نظام الملفات‪ ،‬وأعد تسمية‬
‫‪:‬الملف‬

‫مثال‬

‫‪:‬وانقل الملف إلى المجلد الحالي ‪ fs،‬قم بتضمين الوحدة النمطية‬

‫;)'‪var http = require('http‬‬


‫;)'‪var formidable = require('formidable‬‬
‫;)'‪var fs = require('fs‬‬

‫{ )‪http.createServer(function (req, res‬‬


‫{ )'‪if (req.url == '/fileupload‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪45‬‬


var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
var oldpath = files.filetoupload.filepath;
var newpath = 'C:/Users/Your Name/' +
files.filetoupload.originalFilename;
fs.rename(oldpath, newpath, function (err) {
if (err) throw err;
res.write('File uploaded and moved!');
res.end();
});
});
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="fileupload"
method="post" enctype="multipart/form-data">');
res.write('<input type="file"
name="filetoupload"><br>');
res.write('<input type="submit">');
res.write('</form>');
return res.end();
}
}).listen(8080);

‫إرسال بريد إلكتروني‬

Abo Habib Al_Hosiny Node.js 46


‫‪ Nodemailer‬وحدة‬
‫على تسهيل إرسال رسائل البريد اإللكتروني من ‪ Nodemailer‬تعمل وحدة‬
‫‪.‬جهاز الكمبيوتر الخاص بك‬
‫‪ npm:‬وتثبيتها باستخدام ‪ Nodemailer‬يمكن تنزيل وحدة‬

‫‪C:\Users\Your Name>npm install nodemailer‬‬

‫‪:‬يمكنك تضمين الوحدة في أي تطبيق ‪ Nodemailer،‬بعد تنزيل وحدة‬

‫;)'‪var nodemailer = require('nodemailer‬‬

‫أرسل بريدا إلكترونيا‬


‫‪.‬أنت اآلن جاهز إلرسال رسائل البريد اإللكتروني من الخادم الخاص بك‬
‫استخدم اسم المستخدم وكلمة المرور من مزود البريد اإللكتروني الذي حددته‬
‫‪ Gmail‬إلرسال بريد إلكتروني‪ .‬سيوضح لك هذا الكتاب كيفية استخدام حساب‬
‫‪:‬الخاص بك إلرسال بريد إلكتروني‬

‫مثال‬
‫;)'‪var nodemailer = require('nodemailer‬‬

‫{(‪var transporter = nodemailer.createTransport‬‬


‫‪service: 'gmail',‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪47‬‬


auth: {
user: '[email protected]',
pass: 'password_Abo_Habib'
}
});

var mailOptions = {
from: '[email protected]',
to: '[email protected]',
subject: 'Sending Email with node js‘
text: 'That was easy!'
};

transporter.sendMail(mailOptions, function(error,
info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});

‫وهذا كل شيء! اآلن خادمك قادر على إرسال رسائل البريد اإللكتروني‬.

‫ارسال و استقبال متعدد‬


‫ قم بإضافتهم إلى الخاصية‬،‫إلرسال بريد إلكتروني إلى أكثر من مستلم واحد‬
"to" ‫ لكائن‬mailOptions، ‫مفصولين بفواصل‬:

Abo Habib Al_Hosiny Node.js 48


‫مثال‬

‫إرسال البريد اإللكتروني إلى أكثر من عنوان‬:

var mailOptions = {
from: '[email protected]',
to: '[email protected], [email protected]
om',
subject: 'Sending Email usin ‘
text: 'That was easy!'
}

‫ إرسال‬HTML
‫ إلرسال نص بتنسيق‬HTML ‫ استخدم خاصية‬،‫" في بريدك اإللكتروني‬html"
‫" بدال ً من خاصية‬text":

‫مثال‬

‫ إرسال بريد إلكتروني يحتوي على‬HTML:

var mailOptions = {
from: '[email protected]',

Abo Habib Al_Hosiny Node.js 49


‫‪to: '[email protected]',‬‬
‫‘ ‪subject: 'Sending Email using‬‬
‫'>‪html: '<h1>Welcome</h1><p>That was easy!</p‬‬
‫}‬

‫ماي إس كيو إل‬ ‫نود جى اس‬

‫‪.‬يمكن استخدام نود جى اس في تطبيقات قواعد البيانات‬


‫‪ MySQL.‬واحدة من قواعد البيانات األكثر شعبية هي‬

‫قاعدة بيانات ماي إس كيو إل‬


‫‪ MySQL‬لتتمكن من تجربة أمثلة التعليمات البرمجية‪ ،‬يجب أن يكون لديك‬
‫‪.‬مثبتًا نسحة على جهاز الكمبيوتر الخاص بك‬
‫مجانية على ‪ MySQL‬يمكنك تنزيل النسحة‬
‫‪https://www.mysql.com/downloads/‬‬

‫‪ MySQL‬قم بتثبيت برنامج تشغيل‬


‫على جهاز الكمبيوتر الخاص بك‪ ،‬يمكنك الوصول إليه ‪ MySQL‬بمجرد تشغيل‬
‫‪ .‬باستخدام نود جى اس‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪50‬‬


‫باستخدام نود جى اس ‪ ،‬تحتاج إلى ‪ MySQL‬للوصول إلى قاعدة بيانات‬
‫التي تم "‪ "mysql‬سيستخدم هذا الكتاب وحدة ‪ MySQL.‬برنامج تشغيل‬
‫‪ NPM.‬تنزيلها من‬
‫‪:‬افتح محطة األوامر وقم بتنفيذ ما يلي ‪ "mysql"،‬لتنزيل وتثبيت وحدة‬

‫‪C:\Users\Your Name>npm install mysql‬‬

‫‪ MySQL.‬لقد قمت اآلن بتنزيل وتثبيت برنامج تشغيل قاعدة بيانات‬


‫‪ MySQL:‬يمكن لـ نود جى اس استخدام هذه الوحدة لمعالجة قاعدة بيانات‬

‫;)'‪var mysql = require('mysql‬‬

‫إنشاء اتصال‬
‫‪.‬ابدأ بإنشاء اتصال بقاعدة البيانات‬
‫‪ MySQL .‬استخدم اسم المستخدم وكلمة المرور من قاعدة بيانات‬

‫‪Abo_Habib_db_connection.js‬‬

‫;)'‪var mysql = require('mysql‬‬

‫{(‪var con = mysql.createConnection‬‬


‫‪host: "localhost",‬‬
‫‪user: "Abo_Habib_Al_Hosiny",‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪51‬‬


password: "password_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_connection.js"


‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_connection.js"

C:\Users\Your Name>node
Abo_Habib_db_connection.js

‫والتي سوف تعطيك هذه النتيجة‬:

Connected!

‫ يمكنك اآلن البدء في االستعالم عن قاعدة البيانات باستخدام عبارات‬SQL.

Abo Habib Al_Hosiny Node.js 52


‫االستعالم عن قاعدة بيانات‬
‫للقراءة من (أو الكتابة إلى) قاعدة بيانات ‪ SQL‬استخدم عبارات‬
‫أيضا "لالستعالم" عن قاعدة البيانات ‪MySQL.‬‬
‫‪.‬ويسمى هذا ً‬
‫يحتوي كائن االتصال الذي تم إنشاؤه في المثال أعاله على طريقة لالستعالم‬
‫‪:‬عن قاعدة البيانات‬

‫{ )‪con.connect(function(err‬‬
‫;‪if (err) throw err‬‬
‫;)"!‪console.log("Connected‬‬
‫{ )‪con.query(sql, function (err, result‬‬
‫;‪if (err) throw err‬‬
‫;)‪console.log("Result: " + result‬‬
‫;)}‬
‫;)}‬

‫‪.‬كمعلمة وترجع النتيجة ‪ SQL‬تأخذ طريقة االستعالم عبارات‬


‫تعرف على كيفية قراءة قاعدة البيانات وكتابتها وحذفها وتحديثها في الفصول‬
‫‪.‬التالية‬
‫‪ SQL .‬في برنامجنا التعليمي لـ ‪ SQL‬اقرأ المزيد حول عبارات‬

‫إنشاء قاعدة ‪MySQL‬‬


‫نود جى اس‬

‫بيانات‬
‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪53‬‬
‫إنشاء قاعدة بيانات‬
‫ إلنشاء قاعدة بيانات في‬MySQL، ‫"استخدم عبارة "إنشاء قاعدة بيانات‬:

‫مثال‬
‫" قم بإنشاء قاعدة بيانات باسم‬database_Abo_Habib":

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("CREATE DATABASE
database_Abo_Habib", function (err, result) {
if (err) throw err;
console.log("Database created");

Abo Habib Al_Hosiny Node.js 54


});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_create_db.js" ‫وقم‬


‫بتشغيل الملف‬:

‫" تشغيل‬Abo_Habib_create_db.js"

C:\Users\Your Name>node Abo_Habib_create_db.js

‫والتي سوف تعطيك هذه النتيجة‬:

Connected!
Database created

‫نود جى اس‬ MySQL ‫إنشاء جدول‬

‫إنشاء جدول‬
‫ إلنشاء جدول في‬MySQL، ‫" استخدم عبارة‬CREATE TABLE".

Abo Habib Al_Hosiny Node.js 55


‫تأكد من تحديد اسم قاعدة البيانات عند إنشاء االتصال‬:

‫مثال‬

‫"قم بإنشاء جدول باسم "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "CREATE TABLE customers (name
VARCHAR(255), address VARCHAR(255))";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table created");
});
});

Abo Habib Al_Hosiny Node.js 56


‫وقم "‪ "Abo_Habib_create_table.js‬احفظ الكود أعاله في ملف يسمى‬
‫‪:‬بتشغيل الملف‬

‫"‪ "Abo_Habib_create_table.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_create_table.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫!‪Connected‬‬
‫‪Table created‬‬

‫المفتاح األساسي‬
‫أيضا إنشاء عمود يحتوي على مفتاح فريد لكل‬
‫عند إنشاء جدول‪ ،‬يجب عليك ً‬
‫‪.‬سجل‬
‫‪ "INT‬يمكن القيام بذلك عن طريق تعريف عمود باسم‬
‫والذي سيقوم بإدراج رقم فريد "‪AUTO_INCREMENT PRIMARY KEY‬‬
‫ابتداء من ‪ ،1‬وزيادة بمقدار واحد لكل سجل‬
‫ً‬ ‫‪.‬لكل سجل‪.‬‬

‫مثال‬

‫‪:‬قم بإنشاء مفتاح أساسي عند إنشاء الجدول‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪57‬‬


var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "CREATE TABLE customers (id INT
AUTO_INCREMENT PRIMARY KEY, name
VARCHAR(255), address VARCHAR(255))";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table created");
});
});

‫ فاستخدم الكلمة األساسية‬،‫موجودا بالفعل‬


ً ‫ إذا كان الجدول‬ALTER TABLE:

‫مثال‬

‫إنشاء مفتاح أساسي في جدول موجود‬:

Abo Habib Al_Hosiny Node.js 58


var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "ALTER TABLE customers ADD COLUMN id
INT AUTO_INCREMENT PRIMARY KEY";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table altered");
});
});

Abo Habib Al_Hosiny Node.js 59


‫إدراج في الجدول‬
‫ لملء جدول في‬MySQL، ‫" استخدم عبارة‬INSERT INTO".

‫مثال‬

‫"أدخل سجال ً في جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address)
VALUES ('Company Inc', 'Giza 37')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
});
});

Abo Habib Al_Hosiny Node.js 60


‫وقم ‪ "Abo_Habib_db_insert.js"،‬احفظ الكود أعاله في ملف يسمى‬
‫‪:‬بتشغيل الملف‬

‫"‪ "Abo_Habib_db_insert.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node Abo_Habib_db_insert.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫!‪Connected‬‬
‫‪1 record inserted‬‬

‫إدراج سجالت متعددة‬


‫إلدراج أكثر من سجل واحد‪ ،‬أنشئ مصفوفة تحتوي على القيم‪ ،‬وأدخل عالمة‬
‫‪:‬والتي سيتم استبدالها بمصفوفة القيم ‪ SQL،‬استفهام في‬
‫? ‪INSERT INTO customers (name, address) VALUES‬‬

‫مثال‬

‫‪:‬امأل جدول "العمالء" بالبيانات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪61‬‬


var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address)
VALUES ?";
var values = [
['Amro', 'Giza 71'],
['HAbib', 'Al_Badrashen 4'],
['Mohamed', 'Apple st 652'],
['Ahmed', 'ElSudeya 21'],
['Abo_Ali', 'Omar 345'],
['Sandy', 'Ocean blvd 2'],
['Abo_saly', 'Green Grass 1'],
['Fatma', 'Sky st 331'],
['Susan', 'One way 98'],
['Sameer', 'Yellow Garden 2'],
['Ben', 'Park Lane 38'],
['Osman', 'Central st 954'],
['ghaled', 'Main Road 989'],
['Mahmoud', 'Sideway 1633']

Abo Habib Al_Hosiny Node.js 62


];
con.query(sql, [values], function (err, result) {
if (err) throw err;
console.log("Number of records inserted: " +
result.affectedRows);
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_db_insert_multple.js"، ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_insert_multiple.js"

C:\Users\Your Name>node
Abo_Habib_db_insert_multiple.js

‫والتي سوف تعطيك هذه النتيجة‬:

Connected!
Number of records inserted: 14

‫كائن النتيجة‬
‫ يتم إرجاع كائن النتيجة‬،‫عند تنفيذ استعالم‬.

Abo Habib Al_Hosiny Node.js 63


‫‪.‬يحتوي كائن النتيجة على معلومات حول كيفية تأثير االستعالم على الجدول‬
‫‪:‬يبدو الكائن الناتج الذي تم إرجاعه من المثال أعاله كما يلي‬

‫{‬
‫‪fieldCount: 0,‬‬
‫‪affectedRows: 14,‬‬
‫‪insertId: 0,‬‬
‫‪serverStatus: 2,‬‬
‫‪warningCount: 0,‬‬
‫‪message: '\'Records:14 Duplicated: 0 Warnings: 0',‬‬
‫‪protocol41: true,‬‬
‫‪changedRows: 0‬‬
‫}‬

‫‪:‬يمكن عرض قيم الخصائص على النحو التالي‬

‫مثال‬

‫‪:‬إرجاع عدد الصفوف المتأثرة‬

‫)‪console.log(result.affectedRows‬‬

‫‪:‬والتي سوف تنتج هذه النتيجة‬

‫‪14‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪64‬‬


‫الحصول على المعرف‬
‫ يمكنك‬،‫بالنسبة للجداول التي تحتوي على حقل معرف الزيادة التلقائية‬
‫الحصول على معرف الصف الذي أدرجته للتو عن طريق سؤال الكائن الناتج‬.

‫ يمكن إدراج صف واحد فقط‬،‫ لتتمكن من الحصول على المعرف المدرج‬:‫مالحظة‬


.

‫مثال‬

‫ ثم قم بإرجاع المعرف‬،"‫قم بإدراج سجل في جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "INSERT INTO customers (name, address)
VALUES ('Michelle', 'Blue Village 1')";

Abo Habib Al_Hosiny Node.js 65


con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted, ID:
" + result.insertId);
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_insert_id.js"، ‫وقم‬


‫بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_insert_id.js"

C:\Users\Your Name>node
Abo_Habib_db_insert_id.js

‫والذي سيعطيك شيًئا مثل هذا في المقابل‬:

1 record inserted, ID: 15

MySQL ‫تابع‬

Abo Habib Al_Hosiny Node.js 66


‫االختيار من الجدول‬
‫ لتحديد بيانات من جدول في‬MySQL، ‫" استخدم عبارة‬SELECT".

‫مثال‬

‫ واعرض الكائن الناتج‬،"‫حدد كافة السجالت من جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM
customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});

Abo Habib Al_Hosiny Node.js 67


SELECT * ‫سيُرجع كافة األعمدة‬

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_select.js" ‫وقم‬


‫بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_select.js"

C:\Users\Your Name>node Abo_Habib_db_select.js

‫والتي سوف تعطيك هذه النتيجة‬:


[
{ id: 1, name: 'Amro', address: 'Giza 71'},
{ id: 2, name: 'HAbib', address: 'Al_Badrashen 4'},
{ id: 3, name: 'Mohamed', address: 'Apple st 652'},
{ id: 4, name: 'Ahmed', address: 'ElSudeya 21'},
{ id: 5, name: 'Abo_Ali', address: 'Omar 345'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 7, name: 'Abo_saly', address: 'Green Grass 1'},
{ id: 8, name: 'Fatma', address: 'Sky st 331'},
{ id: 9, name: 'Susan', address: 'One way 98'},
{ id: 10, name: 'Sameer', address: 'Yellow Garden 2'},
{ id: 11, name: 'Ben', address: 'Park Lane 38'},
{ id: 12, name: 'Osman', address: 'Central st 954'},
{ id: 13, name: 'ghaled', address: 'Main Road 989'},
{ id: 14, name: 'Mahmoud', address: 'Sideway 1633'}
]

Abo Habib Al_Hosiny Node.js 68


‫اختيار األعمدة‬
‫ استخدم عبارة‬،‫" لتحديد بعض األعمدة فقط في الجدول‬SELECT" ‫متبوعة‬
‫باسم العمود‬.

‫مثال‬

‫ واعرض كائن اإلرجاع‬،"‫حدد االسم والعنوان من جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;

Abo Habib Al_Hosiny Node.js 69


con.query("SELECT name, address FROM
customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_select2.js" ‫وقم‬


‫بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_select2.js"

C:\Users\Your Name>node Abo_Habib_db_select2.js

‫والتي سوف تعطيك هذه النتيجة‬:


[
{ name: 'Amro', address: 'Giza 71'},
{ name: 'HAbib', address: 'Al_Badrashen 4'},
{ name: 'Mohamed', address: 'Apple st 652'},
{ name: 'Ahmed', address: 'ElSudeya 21'},
{ name: 'Abo_Ali', address: 'Omar 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Abo_saly', address: 'Green Grass 1'},
{ name: 'Fatma', address: 'Sky st 331'},
{ name: 'Susan', address: 'One way 98'},
{ name: 'Sameer', address: 'Yellow Garden 2'},

Abo Habib Al_Hosiny Node.js 70


‫‪{ name: 'Ben', address: 'Park Lane 38'},‬‬
‫‪{ name: 'Osman', address: 'Central st 954'},‬‬
‫‪{ name: 'ghaled', address: 'Main Road 989'},‬‬
‫}'‪{ name: 'Mahmoud', address: 'Sideway 1633‬‬
‫]‬

‫كائن النتيجة‬
‫كما ترون من نتيجة المثال أعاله‪ ،‬فإن الكائن الناتج هو مصفوفة تحتوي على‬
‫‪.‬كل صف ككائن‬
‫إلرجاع عنوان السجل الثالث على سبيل المثال‪ ،‬ما عليك سوى الرجوع إلى‬
‫‪:‬خاصية عنوان كائن المصفوفة الثالثة‬

‫مثال‬

‫‪:‬إرجاع عنوان السجل الثالث‬

‫;)‪console.log(result[2].address‬‬

‫‪:‬والتي سوف تنتج هذه النتيجة‬

‫‪Apple st 652‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪71‬‬


‫كائن الحقول‬
‫المعلمة الثالثة لوظيفة رد االتصال هي مصفوفة تحتوي على معلومات حول كل‬
‫حقل في النتيجة‬.

‫مثال‬

‫ واعرض كائن الحقول‬،"‫ حدد كافة السجالت من جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
con.query("SELECT name, address FROM
customers", function (err, result, fields) {
if (err) throw err;
console.log(fields);
});
});

Abo Habib Al_Hosiny Node.js 72


‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_select_fields.js"
‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_select_fields.js"

C:\Users\Your Name>node
Abo_Habib_db_select_fields.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{
catalog: 'def',
db: 'database_Abo_Habib',
table: 'customers',
orgTable: 'customers',
name: 'name',
orgName: 'name',
charsetNr: 33,
length: 765,
type: 253,
flags: 0,
decimals: 0,
default: undefined,
zeroFill: false,
protocol41: true
},

Abo Habib Al_Hosiny Node.js 73


{
catalog: 'def',
db: 'database_Abo_Habib',
table: 'customers',
orgTable: 'customers',
name: 'address',
orgName: 'address',
charsetNr: 33,
length: 765,
type: 253,
flags: 0,
decimals: 0,
default: undefined,
zeroFill: false,
protocol41: true
}
]

‫ كائن الحقول عبارة عن مصفوفة تحتوي على‬،‫كما ترون من نتيجة المثال أعاله‬
‫معلومات حول كل حقل ككائن‬.
‫ ما عليك سوى الرجوع إلى خاصية‬،‫إلرجاع اسم الحقل الثاني على سبيل المثال‬
‫اسم عنصر المصفوفة الثانية‬:

‫مثال‬

‫إرجاع اسم الحقل الثاني‬:

console.log(fields[1].name);

Abo Habib Al_Hosiny Node.js 74


‫والتي سوف تنتج هذه النتيجة‬:

address

MySQL ‫البحث‬

‫حدد مع مرشح‬
‫ يمكنك تصفية التحديد باستخدام عبارة‬،‫عند تحديد السجالت من جدول‬
"WHERE":

‫مثال‬

‫" حدد السجل (السجالت) ذات العنوان‬Park Lane 38":

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

Abo Habib Al_Hosiny Node.js 75


con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE
address = 'Park Lane 38'", function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_where.js" ‫وقم‬


‫بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_where.js"

C:\Users\Your Name>node Abo_Habib_db_where.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ id: 11, name: 'Ben', address: 'Park Lane 38'}
]

Abo Habib Al_Hosiny Node.js 76


‫أحرف البدل‬
‫أيضا تحديد السجالت التي تبدأ أو تتضمن أو تنتهي بحرف أو عبارة‬
ً ‫يمكنك‬
‫معينة‬.

‫' لتمثيل صفر أو حرف واحد أو عدة أحرف‬%' ‫استخدم حرف البدل‬:

‫مثال‬

‫" حدد السجالت التي يبدأ عنوانها بالحرف‬S":

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE
address LIKE 'S%'", function (err, result) {
if (err) throw err;
console.log(result);

Abo Habib Al_Hosiny Node.js 77


‫;)}‬
‫;)}‬

‫وقم "‪ "Abo_Habib_db_where_s.js‬احفظ الكود أعاله في ملف يسمى‬


‫‪:‬بتشغيل الملف‬

‫"‪ "Abo_Habib_db_where_s.js‬تشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_db_where_s.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫[‬
‫‪{ id: 8, name: 'Fatma', address: 'Sky st 331'},‬‬
‫}'‪{ id: 14, name: 'Mahmoud', address: 'Sideway 1633‬‬
‫]‬

‫االثتثناءات من قيم االستعالم‬


‫عندما تكون قيم االستعالم متغيرات مقدمة من قبل المستخدم‪ ،‬يجب عليك‬
‫‪.‬االثتثناءات من القيم‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪78‬‬


‫وهو أسلوب شائع الختراق الويب لتدمير قاعدة البيانات ‪ SQL،‬وذلك لمنع حقن‬
‫‪.‬أو إساءة استخدامها‬
‫‪:‬على طرق للهروب من قيم االستعالم ‪ MySQL‬تحتوي وحدة‬

‫مثال‬

‫‪:‬الطريقة )(‪ mysql.escape‬االثتثناءات من قيم االستعالم باستخدام‬

‫;'‪var adr = 'ElSudeya 21‬‬


‫‪var sql = 'SELECT * FROM customers WHERE address‬‬
‫;)‪= ' + mysql.escape(adr‬‬
‫{ )‪con.query(sql, function (err, result‬‬
‫;‪if (err) throw err‬‬
‫;)‪console.log(result‬‬
‫;)}‬

‫أيضا استخدام ?كعنصر نائب للقيم التي تريد االثتثناءات منها‬


‫‪.‬يمكنك ً‬
‫‪ () :‬في هذه الحالة‪ ،‬يتم إرسال المتغير كمعلمة ثانية في طريقة االستعالم‬

‫مثال‬

‫‪:‬تخطي قيم االستعالم باستخدام ? أسلوب العنصر النائب‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪79‬‬


var adr = 'ElSudeya 21';
var sql = 'SELECT * FROM customers WHERE address
= ?';
con.query(sql, [adr], function (err, result) {
if (err) throw err;
console.log(result);
});

‫ بهذا‬،‫ فإن المصفوفة تحتوي على قيم متعددة‬،‫إذا كان لديك عدة عناصر نائبة‬
‫الترتيب‬:

‫مثال‬

‫عناصر نائبة متعددة‬:

var name = 'Mohamed';


var adr = 'ElSudeya 21';
var sql = 'SELECT * FROM customers WHERE name
= ? OR address = ?';
con.query(sql, [name, adr], function (err, result) {
if (err) throw err;
console.log(result);
});

Abo Habib Al_Hosiny Node.js 80


‫الترتيب ‪ MySQL‬نود جى اس‬

‫فرز النتيجة‬
‫‪.‬لفرز النتيجة بترتيب تصاعدي أو تنازلي ‪ ORDER BY‬استخدم عبارة‬
‫بفرز النتيجة تصاعديًا بشكل ‪ ORDER BY‬تقوم الكلمة األساسية‬
‫‪ DESC.‬افتراضي‪ .‬لفرز النتيجة بترتيب تنازلي‪ ،‬استخدم الكلمة األساسية‬

‫مثال‬

‫‪:‬ترتيب النتيجة أبجديا حسب االسم‬

‫;)'‪var mysql = require('mysql‬‬

‫{(‪var con = mysql.createConnection‬‬


‫‪host: "localhost",‬‬
‫‪user: "Abo_Habib_Al_Hosiny",‬‬
‫‪password: "password_Abo_Habib",‬‬
‫"‪database: "database_Abo_Habib‬‬
‫;)}‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪81‬‬


con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers ORDER BY
name", function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_orderby.js" ‫وقم‬


‫بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_orderby.js"

C:\Users\Your Name>node Abo_Habib_db_orderby.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ id: 3, name: 'Mohamed', address: 'Apple st 652'},
{ id: 11, name: 'Ben', address: 'Park Lane 38'},
{ id: 7, name: 'Abo_saly', address: 'Green Grass 1'},
{ id: 13, name: 'ghaled', address: 'Main Road 989'},
{ id: 4, name: 'Ahmed', address: 'ElSudeya 21'},
{ id: 1, name: 'Amro', address: 'Higheay 71'},

Abo Habib Al_Hosiny Node.js 82


{ id: 5, name: 'Abo_Ali', address: 'Omar 345'},
{ id: 2, name: 'HAbib', address: 'Al_Badrashen 4'},
{ id: 8, name: 'Fatma', address: 'Sky st 331'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 9, name: 'Susan', address: 'One way 98'},
{ id: 10, name: 'Sameer', address: 'Yellow Garden 2'},
{ id: 14, name: 'Mahmoud', address: 'Sideway 1633'},
{ id: 12, name: 'Osman', address: 'Central st 954'}
]

‫الطلب حسب الوصف‬


‫ استخدم الكلمة األساسية‬DESC ‫لفرز النتيجة بترتيب تنازلي‬.

‫مثال‬

‫ترتيب النتيجة عكسيا أبجديا حسب االسم‬:

var mysql = require('mysql');

var con = mysql.createConnection({

Abo Habib Al_Hosiny Node.js 83


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers ORDER BY
name DESC", function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_db_orderby_desc.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_orderby_desc.js"

C:\Users\Your Name>node
Abo_Habib_db_orderby_desc.js

‫والتي سوف تعطيك هذه النتيجة‬:

Abo Habib Al_Hosiny Node.js 84


[
{ id: 12, name: 'Osman', address: 'Central st 954'},
{ id: 14, name: 'Mahmoud', address: 'Sideway 1633'},
{ id: 10, name: 'Sameer', address: 'Yellow Garden 2'},
{ id: 9, name: 'Susan', address: 'One way 98'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 8, name: 'Fatma', address: 'Sky st 331'},
{ id: 2, name: 'HAbib', address: 'Al_Badrashen 4'},
{ id: 5, name: 'Abo_Ali', address: 'Omar 345'},
{ id: 1, name: 'Amro', address: 'Higheay 71'},
{ id: 4, name: 'Ahmed', address: 'ElSudeya 21'},
{ id: 13, name: 'ghaled', address: 'Main Road 989'},
{ id: 7, name: 'Abo_saly', address: 'Green Grass 1'},
{ id: 11, name: 'Ben', address: 'Park Lane 38'},
{ id: 3, name: 'Mohamed', address: 'Apple st 652'}
]

‫حذف جدول‬
‫" يمكنك حذف جدول موجود باستخدام عبارة‬DROP TABLE":

Abo Habib Al_Hosiny Node.js 85


‫مثال‬

‫"حذف جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "DROP TABLE customers";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table deleted");
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_drop_table.js"


‫وقم بتشغيل الملف‬:

Abo Habib Al_Hosiny Node.js 86


‫" قم بتشغيل‬Abo_Habib_db_drop_table.js"

C:\Users\Your Name>node
Abo_Habib_db_drop_table.js

‫والتي سوف تعطيك هذه النتيجة‬:

Table deleted

‫حذف فقط إذا كان موجودا‬


،‫ أو غير موجود ألي سبب آخر‬،‫إذا كان الجدول الذي تريد حذفه محذوفًا بالفعل‬
‫ فيمكنك استخدام الكلمة األساسية‬IF EXISTS ‫لتجنب الحصول على خطأ‬.

‫مثال‬

‫احذف جدول "العمالء" إن وجد‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",

Abo Habib Al_Hosiny Node.js 87


database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "DROP TABLE IF EXISTS customers";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_db_drop_table_if.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_db_drop_table_if.js"

C:\Users\Your Name>node
Abo_Habib_db_drop_table_if.js

‫ فسيبدو الكائن الناتج كما يلي‬،‫موجودا‬


ً ‫إذا كان الجدول‬:

{
fieldCount: 0,
affectedRows: 0,
insertId: 0,

Abo Habib Al_Hosiny Node.js 88


serverstatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}

‫ فسيبدو الكائن الناتج كما يلي‬،‫إذا كان الجدول غير موجود‬:

{
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverstatus: 2,
warningCount: 1,
message: '',
protocol41: true,
changedRows: 0
}

‫ فإن االختالف الوحيد هو أن الخاصية‬،‫ كما ترون‬WaringCount ‫تم تعيينها‬


‫ إذا كان الجدول غير موجود‬1 ‫على‬.

‫تحديث الجدول‬
‫" يمكنك تحديث السجالت الموجودة في الجدول باستخدام عبارة‬UPDATE":

Abo Habib Al_Hosiny Node.js 89


‫مثال‬

‫" استبدل عمود العنوان من‬Omar 345" ‫" إلى‬Canyon 123":

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "UPDATE customers SET address =
'Canyon 123' WHERE address = 'Omar 345'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result.affectedRows + " record(s)
updated");
});
});

Abo Habib Al_Hosiny Node.js 90


‫السجل ‪ WHERE‬تحدد جملة ‪ UPDATE:‬في بناء جملة ‪ WHERE‬الحظ جملة‬
‫فسيتم ‪ WHERE،‬أو السجالت التي يجب تحديثها‪ .‬إذا قمت بحذف جملة‬
‫!تحديث جميع السجالت‬

‫وقم "‪ "Abo_Habib_db_update.js‬احفظ الكود أعاله في ملف يسمى‬


‫‪:‬بتشغيل الملف‬

‫"‪ "Abo_Habib_db_update.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node Abo_Habib_db_update.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫‪1 record(s) updated‬‬

‫كائن النتيجة‬
‫‪.‬عند تنفيذ استعالم‪ ،‬يتم إرجاع كائن النتيجة‬
‫‪.‬يحتوي كائن النتيجة على معلومات حول كيفية تأثير االستعالم على الجدول‬
‫‪:‬يبدو الكائن الناتج الذي تم إرجاعه من المثال أعاله كما يلي‬

‫{‬
‫‪fieldCount: 0,‬‬
‫‪affectedRows: 1,‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪91‬‬


‫‪insertId: 0,‬‬
‫‪serverStatus: 34,‬‬
‫‪warningCount: 0,‬‬
‫‪message: '(Rows matched: 1 Changed: 1 Warnings:‬‬
‫‪0',‬‬
‫‪protocol41: true,‬‬
‫‪changedRows: 1‬‬
‫}‬

‫‪:‬يمكن عرض قيم الخصائص على النحو التالي‬

‫مثال‬

‫‪:‬إرجاع عدد الصفوف المتأثرة‬

‫)‪console.log(result.affectedRows‬‬

‫‪:‬والتي سوف تنتج هذه النتيجة‬

‫‪1‬‬

‫الحد من النتيجة‬
‫يمكنك تحديد عدد السجالت التي يتم إرجاعها من االستعالم‪ ،‬باستخدام عبارة‬
‫‪"LIMIT":‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪92‬‬


‫مثال‬

‫"حدد السجالت الخمسة األولى في جدول "العمالء‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "SELECT * FROM customers LIMIT 5";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_limit.js" ‫وقم‬


‫بتشغيل الملف‬:

Abo Habib Al_Hosiny Node.js 93


‫" تشغيل‬Abo_Habib_db_limit.js"

C:\Users\Your Name>node Abo_Habib_db_limit.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ id: 1, name: 'Amro', address: 'Giza 71'},
{ id: 2, name: 'HAbib', address: 'Al_Badrashen 4'},
{ id: 3, name: 'Mohamed', address: 'Apple st 652'},
{ id: 4, name: 'Ahmed', address: 'ElSudeya 21'},
{ id: 5, name: 'Abo_Ali', address: 'Omar 345'}
]

‫ابدأ البحث من موضع آخر‬


‫ فيمكنك استخدام‬،‫بدءا من السجل الثالث‬
ً ،‫إذا كنت تريد إرجاع خمسة سجالت‬
‫" الكلمة األساسية‬OFFSET":

Abo Habib Al_Hosiny Node.js 94


‫مثال‬

‫ وقم بإرجاع السجالت الخمسة التالية‬،3 ‫ابدأ من الموضع‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "SELECT * FROM customers LIMIT 5
OFFSET 2";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫" تعني البدء من المركز الثالث وليس الثاني‬2 ‫ "اإلزاحة‬:‫!ملحوظة‬

Abo Habib Al_Hosiny Node.js 95


‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_db_offset.js" ‫وقم‬
‫بتشغيل الملف‬:

‫" تشغيل‬Abo_Habib_db_offset.js"

C:\Users\Your Name>node Abo_Habib_db_offset.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ id: 3, name: 'Mohamed', address: 'Apple st 652'},
{ id: 4, name: 'Ahmed', address: 'ElSudeya 21'},
{ id: 5, name: 'Abo_Ali', address: 'Omar 345'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 7, name: 'Abo_saly', address: 'Green Grass 1'}
]

‫بناء جملة أقصر‬


‫أيضا كتابة عبارة‬
ً ‫ يمكنك‬SQL ‫" مثل‬LIMIT 2, 5" ‫والتي تُرجع نفس مثال‬
‫اإلزاحة أعاله‬:

Abo Habib Al_Hosiny Node.js 96


‫مثال‬

‫ وقم بإرجاع السجالت الخمسة التالية‬،3 ‫ابدأ من الموضع‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "SELECT * FROM customers LIMIT 2, 5";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});

‫ األرقام معكوسة‬:‫ملحوظة‬: "LIMIT 2, 5" ‫" هو نفس‬LIMIT 5 OFFSET 2"

Abo Habib Al_Hosiny Node.js 97


‫ضم جدولين أو أكثر‬
،‫استنادا إلى عمود مرتبط بينهما‬
ً ،‫يمكنك دمج صفوف من جدولين أو أكثر‬
‫ باستخدام عبارة‬JOIN.
‫"ضع في اعتبارك أن لديك جدول "المستخدمين" وجدول "المنتجات‬:

‫المستخدمين‬
[
{ id: 1, name: 'Amro', favorite_product: 154},
{ id: 2, name: 'HAbib', favorite_product: 154},
{ id: 3, name: 'Mohamed', favorite_product: 155},
{ id: 4, name: 'Ahmed', favorite_product:},
{ id: 5, name: 'Abo_Ali', favorite_product:}
]

‫منتجات‬
[
{ id: 154, name: 'Ebraheem ' },
{ id: 155, name: 'Hamza' },
{ id: 156, name: 'Yousef }
]

Abo Habib Al_Hosiny Node.js 98


‫ يمكن دمج هذين الجدولين باستخدام‬favorite_product ‫حقل المستخدمين‬
‫ وحقل المنتجات‬id.

‫مثال‬

‫حدد السجالت التي لها تطابق في كال الجدولين‬:

var mysql = require('mysql');

var con = mysql.createConnection({


host: "localhost",
user: "Abo_Habib_Al_Hosiny",
password: "password_Abo_Habib",
database: "database_Abo_Habib"
});

con.connect(function(err) {
if (err) throw err;
var sql = "SELECT users.name AS user,
products.name AS favorite FROM users JOIN
products ON users.favorite_product = products.id";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});

Abo Habib Al_Hosiny Node.js 99


‫كالهما سيعطيك ‪ JOIN.‬بدال ً من ‪ INNER JOIN‬مالحظة‪ :‬يمكنك استخدام‬
‫‪.‬نفس النتيجة‬

‫وقم بتشغيل "‪ "Abo_Habib_db_join.js‬احفظ الكود أعاله في ملف يسمى‬


‫‪:‬الملف‬

‫"‪ "Abo_Habib_db_join.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node Abo_Habib_db_join.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫[‬
‫‪{ user: 'Amro', favorite: 'Ebraheem ' },‬‬
‫‪{ user: 'HAbib', favorite: 'Ebraheem ' },‬‬
‫} '‪{ user: 'Mohamed', favorite: 'Hamza‬‬
‫]‬

‫كما ترون من النتيجة أعاله‪ ،‬يتم إرجاع السجالت المتطابقة في كال الجدولين‬
‫‪.‬فقط‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪100‬‬


‫االنضمام األيسر‬
‫ بغض النظر عما إذا كان لديهم منتج‬،‫إذا كنت تريد إرجاع جميع المستخدمين‬
‫ فاستخدم عبارة‬،‫ مفضل أم ال‬LEFT JOIN:

‫مثال‬

‫حدد كافة المستخدمين والمنتج المفضل لديهم‬:

SELECT users.name AS user,


products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product =
products.id

‫والتي سوف تعطيك هذه النتيجة‬:


[
{ user: 'Amro', favorite: 'Ebraheem ' },
{ user: 'HAbib', favorite: 'Ebraheem ' },
{ user: 'Mohamed', favorite: 'Hamza' },
{ user: 'Ahmed', favorite: null },
{ user: 'Abo_Ali', favorite: null }
]

Abo Habib Al_Hosiny Node.js 101


‫االنضمام الصحيح‬
،‫إذا كنت تريد إرجاع جميع المنتجات والمستخدمين الذين جعلوها مفضلة لديهم‬
‫ فاستخدم عبارة‬،‫حتى لو لم يكن هناك أي مستخدم يجعلها المفضلة لديهم‬
RIGHT JOIN:

‫مثال‬

‫حدد جميع المنتجات والمستخدم الذي جعلها مفضلة لديه‬:

SELECT users.name AS user,


products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product =
products.id

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ user: 'Amro', favorite: 'Ebraheem ' },
{ user: 'HAbib', favorite: 'Ebraheem ' },
{ user: 'Mohamed', favorite: 'Hamza' },
{ user: null, favorite: 'Yousef }
]

Abo Habib Al_Hosiny Node.js 102


‫ملحوظة‪ :‬هانا ومايكل‪ ،‬اللذان ليس لديهما منتج مفضل‪ ،‬لم يتم تضمينهما في‬
‫‪.‬النتيجة‬

‫نود جى اس‬ ‫‪MongoDB‬‬

‫‪.‬يمكن استخدام نود جى اس في تطبيقات قواعد البيانات‬

‫قواعد بيانات ‪MongoDB‬‬


‫لتتمكن من تجربة أمثلة التعليمات البرمجية‪ ،‬ستحتاج إلى الوصول إلى قاعدة‬
‫‪ MongoDB.‬بيانات‬
‫المجانية ‪ MongoDB‬يمكنك تنزيل قاعدة بيانات‬
‫‪ https://www.mongodb.com .‬على‬
‫السحابية ‪ MongoDB‬أو ابدأ على الفور باستخدام خدمة‬
‫‪ https://www.mongodb.com/cloud/atlas .‬على‬

‫‪ MongoDB‬تثبيت برنامج تشغيل‬


‫‪ .‬باستخدام نود جى اس ‪ MongoDB‬دعونا نحاول الوصول إلى قاعدة بيانات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪103‬‬


‫‪ Command‬الرسمي‪ ،‬افتح ‪ MongoDB‬لتنزيل وتثبيت برنامج تشغيل‬
‫‪:‬وقم بتنفيذ ما يلي ‪Terminal‬‬

‫‪ mongodb:‬تنزيل وتثبيت حزمة‬

‫‪C:\Users\Your Name>npm install mongodb‬‬

‫‪ mongodb.‬لقد قمت اآلن بتنزيل وتثبيت برنامج تشغيل قاعدة بيانات‬


‫يمكن لـ نود جى اس استخدام هذه الوحدة لمعالجة قواعد بيانات‬
‫‪MongoDB:‬‬

‫;)'‪var mongo = require('mongodb‬‬

‫إنشاء قاعدة ‪MongoDB‬‬


‫بيانات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪104‬‬


‫إنشاء قاعدة البيانات‬
‫ إلنشاء قاعدة بيانات في‬MongoDB، ‫ ابدأ بإنشاء كائن‬MongoClient، ‫ثم‬
‫ حدد عنوان‬URL ‫ لالتصال بعنوان‬IP ‫الصحيح واسم قاعدة البيانات التي تريد‬
‫إنشاءها‬.
‫ سيقوم‬MongoDB ‫ وإجراء اتصال‬،‫بإنشاء قاعدة البيانات إذا لم تكن موجودة‬
‫بها‬.

‫مثال‬

‫" قم بإنشاء قاعدة بيانات تسمى‬database_Abo_Habib":

var MongoClient = require('mongodb').MongoClient;


var url
= "mongodb://localhost:27017/database_Abo_Habib
";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
console.log("Database created!");
db.close();
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_create_mongo_db.js" ‫وقم بتشغيل الملف‬:

Abo Habib Al_Hosiny Node.js 105


‫"‪ "Abo_Habib_create_mongo_db.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_create_mongo_db.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫!‪Database created‬‬

‫!ال يتم إنشاء قاعدة بيانات حتى تحصل على المحتوى ‪ MongoDB،‬هام‪ :‬في‬

‫حتى تقوم بإنشاء مجموعة (جدول)‪ ،‬مع مستند واحد على ‪ MongoDB‬ينتظر‬
‫‪.‬األقل (سجل) قبل أن يقوم فعليًا بإنشاء قاعدة البيانات (والمجموعة)‬

‫نود جى اس‬
‫إنشاء مجموعة ‪MongoDB‬‬

‫‪ MySQL‬هي نفس الجدول في ‪ MongoDB‬المجموعة في‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪106‬‬


‫إنشاء مجموعة‬
‫ إلنشاء مجموعة في‬MongoDB، ‫ استخدم‬createCollection()‫الطريقة‬:

‫مثال‬

‫"قم بإنشاء مجموعة تسمى "العمالء‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.createCollection("customers", function(err,
res) {
if (err) throw err;
console.log("Collection created!");
db.close();
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_mongodb_createcollection.js" ‫وقم بتشغيل‬
‫الملف‬:

Abo Habib Al_Hosiny Node.js 107


‫"‪ "Abo_Habib_mongodb_createcollection.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_mongodb_createcollection.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫!‪Collection created‬‬

‫!ال يتم إنشاء المجموعة حتى تحصل على المحتوى ‪ MongoDB،‬هام‪ :‬في‬

‫حتى تقوم بإدراج مستند قبل أن يقوم بإنشاء المجموعة ‪ MongoDB‬ينتظر‬


‫‪.‬فعليًا‬

‫نود جى اس‬ ‫‪ MongoDB‬إدراج‬

‫إدراج في المجموعة‬
‫في مجموعة‪ ،‬نستخدم ‪ MongoDB،‬إلدراج سجل‪ ،‬أو مستند كما يطلق عليه في‬
‫‪ insertOne().‬الطريقة‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪108‬‬


‫ المستند في‬MongoDB ‫ هو نفس السجل في‬MySQL

‫ المعلمة األولى للطريقة‬insertOne() )‫هي كائن يحتوي على االسم (األسماء‬


‫والقيمة (القيم) لكل حقل في المستند الذي تريد إدراجه‬.
‫أيضا وظيفة رد اتصال حيث يمكنك التعامل مع أي أخطاء أو نتيجة‬
ً ‫يتطلب‬
‫اإلدراج‬:

‫مثال‬

‫"أدخل مستن ًدا في مجموعة "العمالء‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var myobj = { name: "Company Inc", address: "Giza
37" };

dbo.collection("customers").insertOne(myobj, functi
on(err, res) {
if (err) throw err;
console.log("1 document inserted");
db.close();

Abo Habib Al_Hosiny Node.js 109


‫;)}‬
‫;)}‬

‫"‪ "Abo_Habib_mongodb_insert.js‬احفظ الكود أعاله في ملف يسمى‬


‫‪:‬وقم بتشغيل الملف‬

‫"‪ "Abo_Habib_mongodb_insert.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_mongodb_insert.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫‪1 document inserted‬‬

‫مالحظة‪ :‬إذا حاولت إدراج مستندات في مجموعة غير موجودة‪ ،‬فسيقوم‬


‫‪.‬بإنشاء المجموعة تلقائيًا ‪MongoDB‬‬

‫إدراج مستندات متعددة‬


‫نستخدم ‪ MongoDB،‬إلدراج مستندات متعددة في مجموعة في‬
‫‪.‬الطريقة)(‪ insertMany‬هذه‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪110‬‬


‫ المعلمة األولى للطريقة‬insertMany() ‫هي مصفوفة من الكائنات تحتوي‬
‫على البيانات التي تريد إدراجها‬.
‫أيضا وظيفة رد اتصال حيث يمكنك التعامل مع أي أخطاء أو نتيجة‬
ً ‫يتطلب‬
‫اإلدراج‬:

‫مثال‬

‫"أدخل مستندات متعددة في مجموعة "العمالء‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var myobj = [
{ name: 'Amro', address: 'Giza 71'},
{ name: 'HAbib', address: 'Al_Badrashen 4'},
{ name: 'Mohamed', address: 'Apple st 652'},
{ name: 'Ahmed', address: 'ElSudeya 21'},
{ name: 'Abo_Ali', address: 'Omar 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Abo_saly', address: 'Green Grass 1'},
{ name: 'Fatma', address: 'Sky st 331'},
{ name: 'Susan', address: 'One way 98'},
{ name: 'Sameer', address: 'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane 38'},

Abo Habib Al_Hosiny Node.js 111


{ name: 'Osman', address: 'Central st 954'},
{ name: 'ghaled', address: 'Main Road 989'},
{ name: 'Mahmoud', address: 'Sideway 1633'}
];

dbo.collection("customers").insertMany(myobj, func
tion(err, res) {
if (err) throw err;
console.log("Number of documents inserted: " +
res.insertedCount);
db.close();
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_mongodb_insert_multiple.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_mongodb_insert_multiple.js"

C:\Users\Your Name>node
Abo_Habib_mongodb_insert_multiple.js
‫والتي سوف تعطيك هذه النتيجة‬:

Number of documents inserted: 14

Abo Habib Al_Hosiny Node.js 112


‫كائن النتيجة‬
‫ عند تنفيذ‬insertMany()‫ يتم إرجاع كائن النتيجة‬،‫الطريقة‬.
‫يحتوي الكائن الناتج على معلومات حول كيفية تأثير اإلدراج على قاعدة‬
‫البيانات‬.
‫يبدو الكائن الذي تم إرجاعه من المثال أعاله كما يلي‬:

{
result: { ok: 1, n: 14 },
ops: [
{ name: 'Amro', address: 'Giza 71', _id:
58fdbf5c0ef8a50b4cdd9a84 },
{ name: 'HAbib', address: 'Al_Badrashen 4', _id:
58fdbf5c0ef8a50b4cdd9a85 },
{ name: 'Mohamed', address: 'Apple st 652', _id:
58fdbf5c0ef8a50b4cdd9a86 },
{ name: 'Ahmed', address: 'ElSudeya 21', _id:
58fdbf5c0ef8a50b4cdd9a87 },
{ name: 'Abo_Ali', address: 'Omar 345', _id:
58fdbf5c0ef8a50b4cdd9a88 },
{ name: 'Sandy', address: 'Ocean blvd 2', _id:
58fdbf5c0ef8a50b4cdd9a89 },
{ name: 'Abo_saly', address: 'Green Grass 1', _id:
58fdbf5c0ef8a50b4cdd9a8a },
{ name: 'Fatma', address: 'Sky st 331', _id:
58fdbf5c0ef8a50b4cdd9a8b },
{ name: 'Susan', address: 'One way 98', _id:
58fdbf5c0ef8a50b4cdd9a8c },

Abo Habib Al_Hosiny Node.js 113


{ name: 'Sameer', address: 'Yellow Garden 2', _id:
58fdbf5c0ef8a50b4cdd9a8d },
{ name: 'Ben', address: 'Park Lane 38', _id:
58fdbf5c0ef8a50b4cdd9a8e },
{ name: 'Osman', address: 'Central st 954', _id:
58fdbf5c0ef8a50b4cdd9a8f },
{ name: 'ghaled', address: 'Main Road 989', _id:
58fdbf5c0ef8a50b4cdd9a90 },
{ name: 'Mahmoud', address: 'Sideway 1633', _id:
58fdbf5c0ef8a50b4cdd9a91 } ],
insertedCount: 14,
insertedIds: [
58fdbf5c0ef8a50b4cdd9a84,
58fdbf5c0ef8a50b4cdd9a85,
58fdbf5c0ef8a50b4cdd9a86,
58fdbf5c0ef8a50b4cdd9a87,
58fdbf5c0ef8a50b4cdd9a88,
58fdbf5c0ef8a50b4cdd9a89,
58fdbf5c0ef8a50b4cdd9a8a,
58fdbf5c0ef8a50b4cdd9a8b,
58fdbf5c0ef8a50b4cdd9a8c,
58fdbf5c0ef8a50b4cdd9a8d,
58fdbf5c0ef8a50b4cdd9a8e,
58fdbf5c0ef8a50b4cdd9a8f
58fdbf5c0ef8a50b4cdd9a90,
58fdbf5c0ef8a50b4cdd9a91 ]
}

‫يمكن عرض قيم الخصائص على النحو التالي‬:

Abo Habib Al_Hosiny Node.js 114


‫مثال‬

‫‪:‬إرجاع عدد المستندات المدرجة‬

‫)‪console.log(res.insertedCount‬‬

‫‪:‬والتي سوف تنتج هذه النتيجة‬

‫‪14‬‬

‫‪ _id‬الحقل‬
‫حقال ً لك ويعين معرفًا فري ًدا لكل ‪ MongoDB‬فسيضيف ‪ _id،‬إذا لم تحدد حقال ً‬
‫‪.‬مستند‬
‫يتم تحديد أي حقل‪ ،‬وكما ترون من الكائن الناتج‪ ،‬قام‪ _id‬في المثال أعاله لم‬
‫‪.‬بتعيين معرف _ فريد لكل مستند ‪MongoDB‬‬
‫‪:‬فيجب أن تكون القيمة فريدة لكل مستند ‪ _id،‬إذا قمت بتحديد الحقل‬

‫مثال‬

‫‪:‬الحقول المحددة‪ _id‬قم بإدراج ثالثة سجالت في جدول "المنتجات"‪ ،‬مع‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪115‬‬


var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var myobj = [
{ _id: 154, name: 'Ebraheem '},
{ _id: 155, name: 'Sameh'},
{ _id: 156, name: 'Hosaam'}
];

dbo.collection("products").insertMany(myobj, functi
on(err, res) {
if (err) throw err;
console.log(res);
db.close();
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_mongodb_insert_id.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_mongodb_insert_id.js"

Abo Habib Al_Hosiny Node.js 116


C:\Users\Your Name>node
Abo_Habib_mongodb_insert_id.js

‫والتي سوف تعطيك هذه النتيجة‬:

{
result: { ok: 1, n: 3 },
ops: [
{ _id: 154, name: 'Ebraheem },
{ _id: 155, name: 'Sameh },
{ _id: 156, name: 'Hosaam } ],
insertedCount: 3,
insertedIds: [
154,
155,
156 ]
}

‫ البحث‬MongoDB
‫ في‬MongoDB ‫ نستخدم طريقتي‬find ‫ و‬findOne ‫للعثور على البيانات‬
‫في مجموعة‬.

Abo Habib Al_Hosiny Node.js 117


‫تماما مثلما يتم استخدام عبارة‬
‫ً‬ ‫للعثور على البيانات في جدول في ‪SELECT‬‬
‫‪ MySQL.‬قاعدة بيانات‬

‫ابحث عن ناتج واحد‬


‫يمكننا استخدام ‪ MongoDB،‬لتحديد البيانات من مجموعة في‬
‫‪.‬الطريقة)(‪ findOne‬هذه‬
‫‪.‬بإرجاع التواجد األول في التحديد)(‪ findOne‬تقوم الطريقة‬
‫هي كائن استعالم‪ .‬في هذا المثال‪ findOne() ،‬المعلمة األولى لألسلوب‬
‫فارغا‪ ،‬والذي يحدد جميع المستندات في المجموعة‬
‫ً‬ ‫نستخدم كائن استعالم‬
‫‪(.‬ولكنه يقوم بإرجاع المستند األول فقط)‬

‫مثال‬

‫‪:‬ابحث عن المستند األول في مجموعة العمالء‬

‫;‪var MongoClient = require('mongodb').MongoClient‬‬


‫;"‪var url = "mongodb://localhost:27017/‬‬

‫{ )‪MongoClient.connect(url, function(err, db‬‬


‫;‪if (err) throw err‬‬
‫;)"‪var dbo = db.db("database_Abo_Habib‬‬

‫‪dbo.collection("customers").findOne({}, function(err‬‬
‫{ )‪, result‬‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪118‬‬


if (err) throw err;
console.log(result.name);
db.close();
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_mongodb_findone.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_mongodb_findone.js"

C:\Users\Your Name>node
Abo_Habib_mongodb_findone.js

‫والتي سوف تعطيك هذه النتيجة‬:

Company Inc.

‫اوجد كل النتائج‬
‫ لتحديد البيانات من جدول في‬MongoDB، ‫أيضا استخدام‬
ً ‫يمكننا‬
‫ هذه‬find()‫الطريقة‬.
‫ تقوم الطريقة‬find()‫بإرجاع كافة التكرارات في التحديد‬.

Abo Habib Al_Hosiny Node.js 119


‫ المعلمة األولى لألسلوب‬find() ‫ نستخدم‬،‫ في هذا المثال‬.‫هي كائن استعالم‬
‫ والذي يقوم بتحديد كافة المستندات الموجودة في‬،‫فارغا‬
ً ‫كائن استعالم‬
‫المجموعة‬.

‫ ال توجد معلمات في طريقة البحث () تمنحك نفس النتيجة مثل‬SELECT


* ‫ في‬MySQL.

‫مثال‬

‫ابحث عن جميع المستندات في مجموعة العمالء‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find({}).toArray(functi
on(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

Abo Habib Al_Hosiny Node.js 120


‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_mongodb_find.js"
‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_mongodb_find.js"

C:\Users\Your Name>node
Abo_Habib_mongodb_find.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ _id: 58fdbf5c0ef8a50b4cdd9a84 , name: 'Amro',
address: 'Giza 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85 , name: 'HAbib',
address: 'Al_Badrashen 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a86 , name:
'Mohamed', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Ahmed',
address: 'ElSudeya 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Abo_Ali',
address: 'Omar 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy',
address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a , name: 'Abo_saly',
address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Fatma',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan',

Abo Habib Al_Hosiny Node.js 121


address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Sameer',
address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben',
address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'Osman',
address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'ghaled',
address: 'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name:
'Mahmoud', address: 'Sideway 1633'}
]

‫جد بعض‬
‫ المعلمة الثانية للطريقة‬find()‫ هي‬projection ‫الكائن الذي يصف الحقول‬
‫التي سيتم تضمينها في النتيجة‬.
‫ سيتم تضمين جميع الحقول في النتيجة‬،‫ وإذا تم حذفها‬،‫هذه المعلمة اختيارية‬.

‫مثال‬

‫قم بإرجاع الحقلين "االسم" و"العنوان" لجميع المستندات الموجودة في‬


‫مجموعة العمالء‬:

Abo Habib Al_Hosiny Node.js 122


var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find({}, { projection:
{ _id: 0, name: 1, address: 1 } }).toArray(function(err,
result) {
if (err) throw err;
console.log(result);
db.close();
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_mongodb_find_fields.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_mongodb_find_fields.js"

C:\Users\Your Name>node
Abo_Habib_mongodb_find_fields.js

‫والتي سوف تعطيك هذه النتيجة‬:

Abo Habib Al_Hosiny Node.js 123


[
{ name: 'Amro', address: 'Giza 71'},
{ name: 'HAbib', address: 'Al_Badrashen 4'},
{ name: 'Mohamed', address: 'Apple st 652'},
{ name: 'Ahmed', address: 'ElSudeya 21'},
{ name: 'Abo_Ali', address: 'Omar 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Abo_saly', address: 'Green Grass 1'},
{ name: 'Fatma', address: 'Sky st 331'},
{ name: 'Susan', address: 'One way 98'},
{ name: 'Sameer', address: 'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane 38'},
{ name: 'Osman', address: 'Central st 954'},
{ name: 'ghaled', address: 'Main Road 989'},
{ name: 'Mahmoud', address: 'Sideway 1633'}
]

‫ في نفس الكائن‬1‫ و‬0 ‫إال إذا كان أحد الحقول ( غير مسموح لك بتحديد القيمتين‬
‫_ هو حقل‬id). ‫ فإن كافة الحقول األخرى‬،0 ‫إذا قمت بتحديد حقل بالقيمة‬
‫ والعكس صحيح‬،1 ‫تحصل على القيمة‬:

‫مثال‬

‫سيستبعد هذا المثال "العنوان" من النتيجة‬:

Abo Habib Al_Hosiny Node.js 124


var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find({}, { projection:
{ address: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

‫_ الستبعاد الحقل‬id، 0 ‫يجب عليك تعيين قيمته على‬:

‫مثال‬

‫سيُرجع هذا المثال حقل "االسم" فقط‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

Abo Habib Al_Hosiny Node.js 125


MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find({}, { projection:
{ _id: 0, name: 1 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

‫مثال‬

‫هذا المثال سيعطيك نفس نتيجة المثال األول؛ إرجاع جميع الحقول باستثناء‬
‫_ حقل‬id:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find({}, { projection:
{ _id: 0 } }).toArray(function(err, result) {
if (err) throw err;

Abo Habib Al_Hosiny Node.js 126


console.log(result);
db.close();
});
});

‫مثال‬

‫ في نفس الكائن‬1‫ و‬0 ‫إال إذا كان( ستحصل على خطأ إذا قمت بتحديد القيمتين‬
‫_ أحد الحقول هو حقل‬id):

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find({}, { projection:
{ name: 1, address: 0 } }).toArray(function(err, result)
{
if (err) throw err;
console.log(result);
db.close();
});
});

Abo Habib Al_Hosiny Node.js 127


‫كائن النتيجة‬
‫كما ترون من نتيجة المثال أعاله‪ ،‬يمكن تحويل النتيجة إلى مصفوفة تحتوي‬
‫‪.‬على كل مستند ككائن‬
‫إلرجاع عنوان المستند الثالث على سبيل المثال‪ ،‬ما عليك سوى الرجوع إلى‬
‫‪:‬خاصية عنوان كائن المصفوفة الثالثة‬

‫مثال‬

‫‪:‬قم بإرجاع عنوان المستند الثالث‬

‫;)‪console.log(result[2].address‬‬

‫‪:‬والتي سوف تنتج هذه النتيجة‬

‫‪Apple st 652‬‬

‫‪ MongoDB‬استعالم‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪128‬‬


‫تصفية النتيجة‬
‫ يمكنك تصفية النتيجة باستخدام كائن‬،‫عند البحث عن مستندات في مجموعة‬
‫استعالم‬.
‫ الوسيطة األولى لألسلوب‬find() ‫ ويتم استخدامها للحد من‬،‫هي كائن استعالم‬
‫البحث‬.

‫مثال‬

‫" ابحث عن المستندات التي تحمل العنوان‬Park Lane 38":

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var query = { address: "Park Lane 38" };

dbo.collection("customers").find(query).toArray(fun
ction(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

Abo Habib Al_Hosiny Node.js 129


‫"‪ "Abo_Habib_mongodb_query.js‬احفظ الكود أعاله في ملف يسمى‬
‫‪:‬وقم بتشغيل الملف‬

‫"‪ "Abo_Habib_mongodb_query.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_mongodb_query.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫[‬
‫‪{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben',‬‬
‫} '‪address: 'Park Lane 38‬‬
‫]‬

‫تصفية مع التعبيرات العادية‬


‫‪.‬يمكنك كتابة تعبيرات عادية للعثور على ما تبحث عنه بالضبط‬

‫‪ .‬ال يمكن استخدام التعبيرات العادية إال لالستعالم عن السالسل النصيه‬

‫‪ "S"،‬للعثور فقط على المستندات التي يبدأ فيها حقل "العنوان" بالحرف‬
‫‪ /^S/:‬استخدم التعبير العادي‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪130‬‬


‫مثال‬

‫" ابحث عن المستندات التي يبدأ عنوانها بالحرف‬S":

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var query = { address: /^S/ };

dbo.collection("customers").find(query).toArray(fun
ction(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

‫احفظ الكود أعاله في ملف يسمى‬


"Abo_Habib_mongodb_query_s.js" ‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_mongodb_query_s.js"

Abo Habib Al_Hosiny Node.js 131


‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_mongodb_query_s.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫[‬
‫‪{ _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Fatma',‬‬
‫‪address: 'Sky st 331' },‬‬
‫‪{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name:‬‬
‫} '‪'Mahmoud', address: 'Sideway 1633‬‬
‫]‬

‫طريقة فرز النتيجة‬


‫‪.‬الطريقة لفرز النتيجة بترتيب تصاعدي أو تنازلي)(‪ sort‬استخدم‬
‫‪.‬معلمة واحدة‪ ،‬وهي كائن يحدد ترتيب الفرز)(‪ sort‬تأخذ الطريقة‬

‫مثال‬

‫‪:‬ترتيب النتيجة أبجديا حسب االسم‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪132‬‬


var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var mysort = { name: 1 };

dbo.collection("customers").find().sort(mysort).toAr
ray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_sort.js" ‫وقم بتشغيل‬


‫الملف‬:

‫" تشغيل‬Abo_Habib_sort.js"

C:\Users\Your Name>node Abo_Habib_sort.js

‫والتي سوف تعطيك هذه النتيجة‬:

Abo Habib Al_Hosiny Node.js 133


[
{ _id: 58fdbf5c0ef8a50b4cdd9a86, name:
'Mohamed', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e, name: 'Ben',
address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a, name: 'Abo_saly',
address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90, name: 'ghaled',
address: 'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87, name: 'Ahmed',
address: 'ElSudeya 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a84, name: 'Amro',
address: 'Giza 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88, name: 'Abo_Ali',
address: 'Omar 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85, name: 'HAbib',
address: 'Al_Badrashen 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8b, name: 'Fatma',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89, name: 'Sandy',
address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c, name: 'Susan',
address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d, name: 'Sameer',
address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91, name:
'Mahmoud', address: 'Sideway 1633'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8f, name: 'Osman',

Abo Habib Al_Hosiny Node.js 134


address: 'Central st 954'}
]

‫ترتيب تنازلي‬
‫ في كائن الفرز للفرز تنازليًا‬1- ‫استخدم القيمة‬.

{ 1 :‫ } االسم‬// ‫تصاعدي‬
{ 1- :‫ } االسم‬// ‫تنازلي‬

‫مثال‬

‫ترتيب النتيجة عكسيا أبجديا حسب االسم‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var mysort = { name: -1 };

dbo.collection("customers").find().sort(mysort).toAr
ray(function(err, result) {

Abo Habib Al_Hosiny Node.js 135


if (err) throw err;
console.log(result);
db.close();
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_sort_desc.js" ‫وقم‬


‫بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_sort_desc.js"

C:\Users\Your Name>node Abo_Habib_sort_desc.js

‫والتي سوف تعطيك هذه النتيجة‬:

[
{ _id: 58fdbf5c0ef8a50b4cdd9a8f, name: 'Osman',
address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91, name:
'Mahmoud', address: 'Sideway 1633'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d, name: 'Sameer',
address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c, name: 'Susan',
address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89, name: 'Sandy',
address: 'Ocean blvd 2'},

Abo Habib Al_Hosiny Node.js 136


{ _id: 58fdbf5c0ef8a50b4cdd9a8b, name: 'Fatma',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85, name: 'HAbib',
address: 'Al_Badrashen 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88, name: 'Abo_Ali',
address: 'Omar 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a84, name: 'Amro',
address: 'Giza 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87, name: 'Ahmed',
address: 'ElSudeya 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90, name: 'ghaled',
address: 'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a, name: 'Abo_saly',
address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e, name: 'Ben',
address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a86, name:
'Mohamed', address: 'Apple st 652'}
]

‫" تشغيل‬Abo_Habib_sort.js"

C:\Users\Your Name>node Abo_Habib_sort.js

Abo Habib Al_Hosiny Node.js 137


‫والتي سوف تعطيك هذه النتيجة‬:

[
{ _id: 58fdbf5c0ef8a50b4cdd9a86, name:
'Mohamed', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e, name: 'Ben',
address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a, name: 'Abo_saly',
address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90, name: 'ghaled',
address: 'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87, name: 'Ahmed',
address: 'ElSudeya 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a84, name: 'Amro',
address: 'Giza 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88, name: 'Abo_Ali',
address: 'Omar 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85, name: 'HAbib',
address: 'Al_Badrashen 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8b, name: 'Fatma',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89, name: 'Sandy',
address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c, name: 'Susan',
address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d, name: 'Sameer',
address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91, name:
'Mahmoud', address: 'Sideway 1633'},

Abo Habib Al_Hosiny Node.js 138


{ _id: 58fdbf5c0ef8a50b4cdd9a8f, name: 'Osman',
address: 'Central st 954'}
]

‫حذف المجموعة‬
‫ أو مجموعة كما يطلق عليها في‬،‫ يمكنك حذف جدول‬MongoDB، ‫باستخدام‬
‫ هذه‬drop()‫الطريقة‬.
‫ تأخذ الطريقة‬drop() ‫دالة رد اتصال تحتوي على كائن الخطأ ومعلمة النتيجة‬
‫ وإال فإنها تُرجع خطأ‬،‫صحيحا إذا تم حذف المجموعة بنجاح‬
ً ‫التي تُرجع‬.

‫مثال‬

‫"حذف جدول "العمالء‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").drop(function(err,
delOK) {
if (err) throw err;
if (delOK) console.log("Collection deleted");

Abo Habib Al_Hosiny Node.js 139


db.close();
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_drop.js" ‫وقم بتشغيل‬


‫الملف‬:

‫" تشغيل‬Abo_Habib_drop.js"

C:\Users\Your Name>node Abo_Habib_drop.js

‫والتي سوف تعطيك هذه النتيجة‬:

Collection deleted

db.dropCollection
ً ‫ يمكنك‬dropCollection())‫الطريقة لحذف جدول (مجموعة‬.
‫أيضا استخدام‬

‫ تأخذ الطريقة‬dropCollection() ‫ اسم المجموعة ووظيفة رد‬:‫معلمتين‬


‫االتصال‬.

Abo Habib Al_Hosiny Node.js 140


‫مثال‬

‫ احذف مجموعة "العمالء" باستخدام‬dropCollection():

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.dropCollection("customers", function(err,
delOK) {
if (err) throw err;
if (delOK) console.log("Collection deleted");
db.close();
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_dropcollection.js"


‫وقم بتشغيل الملف‬:

‫" قم بتشغيل‬Abo_Habib_dropcollection.js"

Abo Habib Al_Hosiny Node.js 141


‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_dropcollection.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫‪Collection deleted‬‬

‫‪ MongoDB‬تحديث‬

‫تحديث الوثيقة‬
‫باستخدام ‪ MongoDB‬يمكنك تحديث سجل أو مستند كما يطلق عليه في‬
‫‪ updateOne().‬الطريقة‬
‫هي كائن استعالم يحدد المستند الذي )(‪ updateOne‬المعلمة األولى للطريقة‬
‫‪.‬سيتم تحديثه‬

‫مالحظة‪ :‬إذا عثر االستعالم على أكثر من سجل واحد‪ ،‬فسيتم تحديث التواجد‬
‫‪.‬األول فقط‬

‫‪.‬المعلمة الثانية هي كائن يحدد القيم الجديدة للمستند‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪142‬‬


‫مثال‬

‫" قم بتحديث المستند بالعنوان‬Omar 345" ‫" = إلى االسم‬Mickey"


‫" = والعنوان‬Canyon 123":

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var myquery = { address: "Omar 345" };
var newvalues = { $set: {name: "Mickey",
address: "Canyon 123" } };

dbo.collection("customers").updateOne(myquery, ne
wvalues, function(err, res) {
if (err) throw err;
console.log("1 document updated");
db.close();
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_update_one.js" ‫وقم‬


‫بتشغيل الملف‬:

Abo Habib Al_Hosiny Node.js 143


‫" قم بتشغيل‬Abo_Habib_update_one.js"

C:\Users\Your Name>node
Abo_Habib_update_one.js

‫والتي سوف تعطيك هذه النتيجة‬:

1 document updated

‫تحديث حقول المحددة فقط‬


‫ عند استخدام‬$set‫ يتم تحديث الحقول المحددة فقط‬،‫عامل التشغيل‬:

‫مثال‬

‫" قم بتحديث العنوان من‬Omar 345" ‫" إلى‬Canyon 123":

...
var myquery = { address: "Omar 345" };
var newvalues = { $set: { address: "Canyon 123" } };

dbo.collection("customers").updateOne(myquery, ne
wvalues, function(err, res) {
...

Abo Habib Al_Hosiny Node.js 144


‫تحديث العديد من المستندات‬
،‫لتحديث كافة المستندات التي تفي بمعايير االستعالم‬
‫ استخدم‬updateMany()‫الطريقة‬.

‫مثال‬

‫" تحديث جميع المستندات التي يبدأ االسم فيها بالحرف‬S":

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
var myquery = { address: /^S/ };
var newvalues = {$set: {name: "Minnie"} };
dbo.collection("customers").updateMany(myquery,
newvalues, function(err, res) {
if (err) throw err;
console.log(res.result.nModified + " document(s)
updated");
db.close();

Abo Habib Al_Hosiny Node.js 145


‫;)}‬
‫;)}‬

‫وقم "‪ "Abo_Habib_update_many.js‬احفظ الكود أعاله في ملف يسمى‬


‫‪:‬بتشغيل الملف‬

‫"‪ "Abo_Habib_update_many.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_update_many.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫‪2 document(s) updated‬‬

‫كائن النتيجة‬
‫بإرجاع كائن يحتوي على )(‪ updateMany‬األساليب)(‪ updateOne‬تقوم‬
‫‪.‬معلومات حول كيفية تأثير التنفيذ على قاعدة البيانات‬
‫ليس من المهم فهم معظم المعلومات‪ ،‬ولكن هناك كائن واحد داخل الكائن يسمى‬
‫"النتيجة" والذي يخبرنا ما إذا كان التنفيذ يسير على ما يرام‪ ،‬وعدد المستندات‬
‫‪.‬التي تأثرت‬
‫‪:‬يبدو الكائن الناتج كما يلي‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪146‬‬


‫} ‪{ n: 1, nModified: 2, ok: 1‬‬

‫‪:‬يمكنك استخدام هذا الكائن إلرجاع عدد المستندات المحدثة‬

‫مثال‬

‫‪:‬إرجاع عدد المستندات المحدثة‬

‫;)‪console.log(res.result.nModified‬‬

‫‪:‬والتي سوف تنتج هذه النتيجة‬

‫‪2‬‬

‫الحد من عدد النتائج‬


‫‪.‬الطريقة )(‪ limit‬نستخدم ‪ MongoDB،‬للحد من النتيجة في‬
‫معامل ًا واح ًدا‪ ،‬وهو رقم يحدد عدد المستندات التي سيتم )(‪ limit‬تأخذ الطريقة‬
‫‪.‬إرجاعها‬
‫‪":‬اعتبر أن لديك مجموعة "العمالء‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪147‬‬


‫عمالء‬
[
{ _id: 58fdbf5c0ef8a50b4cdd9a84 , name: 'Amro',
address: 'Giza 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85 , name: 'HAbib',
address: 'Al_Badrashen 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a86 , name:
'Mohamed', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Ahmed',
address: 'ElSudeya 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Abo_Ali',
address: 'Omar 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy',
address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a , name: 'Abo_saly',
address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Fatma',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan',
address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Sameer',
address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben',
address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'Osman',
address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'ghaled',
address: 'Main Road 989'},

Abo Habib Al_Hosiny Node.js 148


{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name:
'Mahmoud', address: 'Sideway 1633'}
]

‫مثال‬

‫ مستندات فقط‬5 ‫حدد النتيجة بإرجاع‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection("customers").find().limit(5).toArray(
function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

‫" احفظ الكود أعاله في ملف يسمى‬Abo_Habib_mongodb_limit.js"


‫وقم بتشغيل الملف‬:

Abo Habib Al_Hosiny Node.js 149


‫" قم بتشغيل‬Abo_Habib_mongodb_limit.js"

C:\Users\Your Name>node
Abo_Habib_mongodb_limit.js

‫والتي سوف تعطيك هذه النتيجة‬:

‫عمالء‬
[
{ _id: 58fdbf5c0ef8a50b4cdd9a84 , name: 'Amro',
address: 'Giza 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85 , name: 'HAbib',
address: 'Al_Badrashen 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a86 , name:
'Mohamed', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Ahmed',
address: 'ElSudeya 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Abo_Ali',
address: 'Omar 345'}
]

‫ تم إرجاع المستندات الخمسة األولى فقط‬،‫كما ترون من النتيجة أعاله‬.

Abo Habib Al_Hosiny Node.js 150


‫ضم المجموعات‬
‫ليست قاعدة بيانات عالئقية‪ ،‬ولكن يمكنك إجراء صلة خارجية ‪MongoDB‬‬
‫‪ $lookup.‬يسرى باستخدام المرحلة‬
‫تحديد المجموعة التي تريد ضمها إلى المجموعة ‪ $lookup‬تتيح لك المرحلة‬
‫‪.‬الحالية‪ ،‬وأي الحقول يجب أن تتطابق‬
‫‪":‬اعتبر أن لديك مجموعة "طلبات" ومجموعة "منتجات‬

‫طلبات‬
‫[‬
‫} ‪{ _id: 1, product_id: 154, status: 1‬‬
‫]‬

‫منتجات‬
‫[‬
‫‪{ _id: 154, name: 'Ebraheem ' },‬‬
‫‪{ _id: 155, name: 'Hamza' },‬‬
‫} ‪{ _id: 156, name: 'Yousef‬‬
‫]‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪151‬‬


‫مثال‬

‫"انضم إلى مستندات "المنتجات" المطابقة لمجموعة "الطلبات‬:

var MongoClient = require('mongodb').MongoClient;


var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {


if (err) throw err;
var dbo = db.db("database_Abo_Habib");
dbo.collection('orders').aggregate([
{ $lookup:
{
from: 'products',
localField: 'product_id',
foreignField: '_id',
as: 'orderdetails'
}
}
]).toArray(function(err, res) {
if (err) throw err;
console.log(JSON.stringify(res));
db.close();
});
});

Abo Habib Al_Hosiny Node.js 152


‫"‪ "Abo_Habib_mongodb_join.js‬احفظ الكود أعاله في ملف يسمى‬
‫‪:‬وقم بتشغيل الملف‬

‫"‪ "Abo_Habib_mongodb_join.js‬قم بتشغيل‬

‫‪C:\Users\Your Name>node‬‬
‫‪Abo_Habib_mongodb_join.js‬‬

‫‪:‬والتي سوف تعطيك هذه النتيجة‬

‫[‬
‫‪{ "_id": 1, "product_id": 154, "status": 1,‬‬
‫[ ‪"orderdetails":‬‬
‫] } " ‪{ "_id": 154, "name": "Ebraheem‬‬
‫}‬
‫]‬

‫كما ترون من النتيجة أعاله‪ ،‬يتم تضمين المستند المطابق من مجموعة‬


‫‪.‬المنتجات في مجموعة الطلبات كمصفوفة‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪153‬‬


‫وحدات نود جى اس‬
‫المضمنة‬

‫يحتوي نود جى اس على مجموعة من الوحدات المضمنة التي يمكنك‬


‫‪.‬استخدامها دون أي تثبيت إضافي‬
‫‪ :‬فيما يلي قائمة بالوحدات المضمنة في اإلصدار ‪ 6.10.3‬من نود جى اس‬
‫‪Module‬‬ ‫وصف‬
‫‪assert‬‬ ‫يوفر مجموعة من اختبارات التأكيد‬
‫‪buffer‬‬ ‫للتعامل مع البيانات الثنائية‬
‫‪child_process‬‬ ‫لتشغيل عملية فرعية‬
‫‪cluster‬‬ ‫لتقسيم عملية عقدة واحدة إلى عمليات متعددة‬
‫‪crypto‬‬ ‫‪ OpenSSL‬للتعامل مع وظائف التشفير‬
‫‪dgram‬‬ ‫‪ UDP‬يوفر تنفيذ مآخذ مخطط بيانات‬
‫‪dns‬‬ ‫ووظائف تحليل األسماء ‪ DNS‬للقيام بعمليات بحث‬
‫‪domain‬‬ ‫إهمال‪ .‬لمعالجة األخطاء غير المعالجة‬
‫‪events‬‬ ‫للتعامل مع األحداث‬
‫‪fs‬‬ ‫للتعامل مع نظام الملفات‬
‫‪http‬‬ ‫‪ HTTP‬لجعل نود جى اس يعمل كخادم‬
‫‪https‬‬ ‫‪ HTTPS.‬لجعل نود جى اس يعمل كخادم‬
‫‪net‬‬ ‫إلنشاء الخوادم والعمالء‬
‫‪os‬‬ ‫يوفر معلومات حول نظام التشغيل‬
‫‪path‬‬ ‫للتعامل مع مسارات الملفات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪154‬‬


‫‪punycode‬‬ ‫إهمال‪ .‬نظام ترميز األحرف‬
‫‪querystring‬‬ ‫‪ URL‬للتعامل مع سالسل استعالم‬
‫‪readline‬‬ ‫سطرا واح ًدا في كل مرة‬
‫للتعامل مع التدفقات القابلة للقراءة ً‬
‫‪stream‬‬ ‫للتعامل مع البيانات المتدفقة‬
‫‪string_decoder‬‬ ‫لفك تشفير الكائنات المخزنة إلى سالسل‬
‫‪timers‬‬ ‫لتنفيذ وظيفة بعد عدد معين من المللي ثانية‬
‫‪tls‬‬ ‫‪SSL‬و ‪ TLS‬لتنفيذ بروتوكوالت‬
‫‪tty‬‬ ‫يوفر الفئات المستخدمة من قبل محطة النص‬
‫‪url‬‬ ‫‪ URL‬لتحليل سالسل‬
‫‪util‬‬ ‫للوصول إلى وظائف المرافق‬
‫‪v8‬‬ ‫)‪ JavaScript‬محرك( ‪ V8‬للوصول إلى معلومات حول‬
‫‪vm‬‬ ‫في جهاز افتراضي ‪ JavaScript‬لتجميع كود‬
‫‪zlib‬‬ ‫لضغط أو فك ضغط الملفات‬

‫‪Abo Habib Al_Hosiny Node.js‬‬ ‫‪155‬‬

You might also like