‏إظهار الرسائل ذات التسميات Node. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات Node. إظهار كافة الرسائل
 Node.js MySQL انضمام (JOIN)
انضم إلى جدولين أو أكثر
يمكنك دمج صفوف من جدولين أو أكثر ، بناءً على عمود مرتبط بينهما ، باستخدام جملة JOIN.
قم بإنشاء جدول "users" وجدول "products" بالقيم التالية: users
[
  { id: 1, name: 'John', favorite_product: 154},
  { id: 2, name: 'Peter', favorite_product: 154},
  { id: 3, name: 'Amy', favorite_product: 155},
  { id: 4, name: 'Hannah', favorite_product:},
  { id: 5, name: 'Michael', favorite_product:}
]
products
[
  { id: 154, name: 'Chocolate Heaven' },
  { id: 155, name: 'Tasty Lemons' },
  { id: 156, name: 'Vanilla Dreams' }
]
يمكن الجمع بين هذين الجدولين باستخدام 'favorite_product'  من حقل users و 'id' من حقل products.

مثال
حدد السجلات مع تطابق في كلا الجدولين:
 
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
ملاحظة: يمكنك استخدام INNER JOIN بدلاً من JOIN. كلاهما سيعطيك نفس النتيجة.
احفظ الكود أعلاه في ملف بإسم "demo_db_join.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_join.js
والتي ستعطيك هذه النتيجة:
[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' }
]
كما ترى من النتيجة أعلاه ، لا يتم إرجاع سوى السجلات المتطابقة في كلا الجدولين.
 Left Join
إذا كنت تريد إرجاع جميع users ، بغض النظر عما إذا كان لديهم منتج مفضل أم لا ، فاستخدم عبارة LEFT JOIN:
مثال
حدد جميع users  والمنتج المفضل لديهم:
SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product = products.id
والتي ستعطيك هذه النتيجة:
[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: 'Hannah', favorite: null },
  { user: 'Michael', favorite: null }
]

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

مثال
حدد جميع المنتجات والمستخدم الذي جعلها مفضلة :
SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product = products.id
والتي ستعطيك هذه النتيجة:
[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: null, favorite: 'Vanilla Dreams' }
]
ملاحظة: لم يتم تضمين Hannah و Michael ، اللذين ليس لديهما منتج مفضل ، في النتيجة.
 Node.js MySQL LIMIT 
حدد النتيجة
يمكنك تحديد عدد السجلات التي يتم إرجاعها من الاستعلام ، باستخدام  الأمر "LIMIT":
مثال
حدد أول 5 سجلات في جدول "العملاء":

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_db_limit.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_limit.js
والتي ستعطيك هذه النتيجة:
[
  { id: 1, name: 'John', address: 'Highway 71'},
  { id: 2, name: 'Peter', address: 'Lowstreet 4'},
  { id: 3, name: 'Amy', address: 'Apple st 652'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 5, name: 'Michael', address: 'Valley 345'}
]
تحديد مكان بدأ الاستعلام
إذا كنت تريد إرجاع خمسة سجلات ، بدءًا من السجل الثالث ، يمكنك استخدام الكلمة الأساسية "OFFSET":
مثال
ابدأ من الحقل 3 وأعد خمسة سجلات  :
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
ملحوظة: "OFFSET 2" تعني البدء من المركز الثالث وليس الثاني! لان المصفوفة تبدأ العد من الصفر
احفظ الكود أعلاه في ملف بإسم "demo_db_offset.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_offset.js
والتي ستعطيك هذه النتيجة:
[
  { id: 3, name: 'Amy', address: 'Apple st 652'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 5, name: 'Michael', address: 'Valley 345'},
  { id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
  { id: 7, name: 'Betty', address: 'Green Grass 1'}
]
اختصار الاستعلام 
يمكنك أيضًا اختصار استعلام SQL بهذه الطريقة  "LIMIT 2، 5" والتي تُرجع نفس النتيجة:

مثال
ابدأ من العمود 3 وأعد خمسة سجلات:
 
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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"
 تحديث وتعديل البيانات Node.js MySQL
تحديث وتعديل الجدول
يمكنك تحديث السجلات الموجودة في جدول باستخدام  الأمر "UPDATE":
مثال
استبدال عمود  address  من "Valley 345" إلى "Canyon 123":
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Valley 345'";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result.affectedRows + " record(s) updated");
  });
});
لاحظ عبارة WHERE في بناء جملة UPDATE: تحدد جملة WHERE السجل أو السجلات التي يجب تحديثها. إذا حذفت بند WHERE ، فسيتم تحديث جميع السجلات!
احفظ الكود أعلاه في ملف بإسم "demo_db_update.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_update.js
لتكون النتيجة كما في المثال التالي
1 record(s) updated
الكائن  (Object) result
عند تنفيذ الإستعلام ، يتم إرجاع  كائن (Object) في متغير result  .

يحتوي متغير result  على معلومات حول كيفية تأثير الاستعلام على الجدول.
يبدو متغير result  الذي تم إرجاعه من المثال أعلاه كما يلي:
{
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 34,
  warningCount: 0,
  message: '(Rows matched: 1 Changed: 1 Warnings: 0',
  protocol41: true,
  changedRows: 1
}
يمكن عرض قيم الخصائص على النحو التالي:
 مثال 
قم بإرجاع عدد الصفوف المتأثرة:
console.log(result.affectedRows)
والتي ستنتج هذه النتيجة:
1
حذف جدول Node.js MySQL Drop Table
يمكنك حذف جدول موجود باستخدام  الأمر"DROP TABLE":
مثال
حذف جدول "customers":
 
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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");
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_db_drop_table.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_drop_table.js
والتي ستعطيك هذه النتيجة:
Table deleted
حذف الجدول فقط إذا كان موجودًا
 إذا تم حذف الجدول الذي تريد حذفه بالفعل ، أو لأي سبب آخر غير موجود ، يمكنك استخدام الكلمة الأساسية IF EXISTS لتجنب حدوث خطأ. 
 مثال احذف جدول "customers" إذا كان موجودًا:
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_db_drop_table_if.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_drop_table_if.js
إذا كان الجدول موجودًا ، فسيبدو الكائن الناتج (Object result)كما يلي:
{
  fieldCount: 0,
  affectedRows: 0,
  insertId: 0,
  serverstatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0
}
إذا لم يكن الجدول موجودًا ، فسيبدو الكائن الناتج  (Object result) كما يلي:
{
  fieldCount: 0,
  affectedRows: 0,
  insertId: 0,
  serverstatus: 2,
  warningCount: 1,
  message: '',
  protocol41: true,
  changedRows: 0
}
كما ترون ، فإن الاختلاف الوحيد هو أن الخاصية WarningCount ترجع القيمة 1 إذا لم يكن الجدول موجودًا.


 حذف سجل (DELETE )
يمكنك حذف سجلات من جدول موجود باستخدام عبارة "DELETE FROM":
مثال
احذف أي سجل (address) بعنوان  "Mountain 21":

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var sql = "DELETE FROM customers WHERE address = 'Mountain 21'";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("Number of records deleted: " + result.affectedRows);
  });
});
لاحظ عبارة WHERE في بناء جملة DELETE: تحدد جملة WHERE السجل أو السجلات التي يجب حذفها. إذا حذفت جملة WHERE ، فسيتم حذف جميع السجلات!

 احفظ الكود أعلاه في ملف بإسم "demo_db_delete.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_delete.js
النتيجة
Number of records deleted: 1
كائن النتيجة result object
عند تنفيذ استعلام ، يتم إرجاع  object في المتغير result.
يحتوي object result على معلومات حول كيفية تأثير الاستعلام على الجدول.
يبدو الكائن الناتج الذي تم إرجاعه من المثال أعلاه كما يلي:
{
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 34,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0
}
يمكن عرض قيم الخصائص على النحو التالي: 
مثال قم بإرجاع عدد الصفوف المتأثرة:
 console.log(result.affectedRows)
النتيجة
1
 ترتيب حسب MySQL Order By
فرز النتيجة
استخدم عبارة ORDER BY لفرز النتيجة بترتيب تصاعدي أو تنازلي.
تقوم الكلمة الأساسية ORDER BY بفرز النتيجة تصاعديًا افتراضيًا. لفرز النتيجة بترتيب تنازلي ، استخدم الكلمة الأساسية DESC.
مثال
فرز النتيجة أبجديًا حسب name:
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف  بإسم "demo_db_orderby.js" وقم بتشغيل الملف: 
C:\Users\Your Name>node demo_db_orderby.js
النتيجة

[
  { id: 3, name: 'Amy', address: 'Apple st 652'},
  { id: 11, name: 'Ben', address: 'Park Lane 38'},
  { id: 7, name: 'Betty', address: 'Green Grass 1'},
  { id: 13, name: 'Chuck', address: 'Main Road 989'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 1, name: 'John', address: 'Higheay 71'},
  { id: 5, name: 'Michael', address: 'Valley 345'},
  { id: 2, name: 'Peter', address: 'Lowstreet 4'},
  { id: 8, name: 'Richard', address: 'Sky st 331'},
  { id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
  { id: 9, name: 'Susan', address: 'One way 98'},
  { id: 10, name: 'Vicky', address: 'Yellow Garden 2'},
  { id: 14, name: 'Viola', address: 'Sideway 1633'},
  { id: 12, name: 'William', address: 'Central st 954'}
]
ترتيب تنازلي DESC
 استخدم الكلمة الأساسية DESC لفرز النتيجة بترتيب تنازلي.
مثال فرز النتيجة عكسيًا أبجديًا حسب name :

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف يسمى "demo_db_orderby_desc.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_orderby_desc.js
النتيجة
[
  { id: 12, name: 'William', address: 'Central st 954'},
  { id: 14, name: 'Viola', address: 'Sideway 1633'},
  { id: 10, name: 'Vicky', address: 'Yellow Garden 2'},
  { id: 9, name: 'Susan', address: 'One way 98'},
  { id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
  { id: 8, name: 'Richard', address: 'Sky st 331'},
  { id: 2, name: 'Peter', address: 'Lowstreet 4'},
  { id: 5, name: 'Michael', address: 'Valley 345'},
  { id: 1, name: 'John', address: 'Higheay 71'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 13, name: 'Chuck', address: 'Main Road 989'},
  { id: 7, name: 'Betty', address: 'Green Grass 1'},
  { id: 11, name: 'Ben', address: 'Park Lane 38'},
  { id: 3, name: 'Amy', address: 'Apple st 652'}
]
 تصفية تحديد البيانات باستخدام  الامر"WHERE":
عند تحديد السجلات من جدول ، يمكنك تصفية التحديد باستخدام الأمر"WHERE":
مثال اجلب البيانات بحيث يكون حقل address  يساوي "Park Lane 38":

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_db_where.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_where.js
لتكون النتيجة بالشكل التالي
[
  { id: 11, name: 'Ben', address: 'Park Lane 38'}
]
أحرف البدل (بالانجليزية  Wildcard Characters)
يمكنك أيضًا تحديد السجلات التي تبدأ أو تتضمن أو تنتهي بحرف أو عبارة معينة.

استخدم حرف البدل "٪" لتمثيل حرف واحد أو أحرف متعددة:

مثال
حدد السجلات حيث يبدأ  حقل address بالحرف "S":

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف باسم "demo_db_where_s.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_where_s.js
لتكون النتيجة بالشكل التالي
[
  { id: 8, name: 'Richard', address: 'Sky st 331'},
  { id: 14, name: 'Viola', address: 'Sideway 1633'}
]
حماية  قيم الاستعلام اذا كانت  متغيرات يرسلها المستخدم 
عندما تكون قيم الاستعلام متغيرات يرسلها المستخدم ، يجب عليك حمايتها فبل تنفيذ الاستعلام.
هذا لمنع حقن SQL ، وهو أسلوب شائع لاختراق الويب لتدمير قاعدة البيانات الخاصة بك أو إساءة استخدامها.
تحتوي الوحدة النمطية (بالانجليزية module) MySQL على دوال للتخلص و تنظيف  قيم الاستعلام:
مثال تنظيف  قيم الاستعلام باستخدام  الدالة mysql.escape ():

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "myusername",
  password: "mypassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var adr = 'Mountain 21';
  //Escape the address value:
  var sql = 'SELECT * FROM customers WHERE address = ' + mysql.escape(adr);
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});
احفظ الكود في الاعلى في ملف بإسم "demo_db_where_escape.js" وشغل الملف
C:\Users\My Name>node demo_db_where_escape.js
لتكون النتيجة بالشكل التالي
[
  { id: 4, name: 'Hannah', address: 'Mountain 21'}
]
يمكنك أيضا استخدام؟ كعنصر نائب للقيم التي تريد الهروب منها. في هذه الحالة ، يتم إرسال المتغير كمعامل ثاني في الدالة query()  وهذا يمنحك تنظيف القيم قبل ارسالها لتنفيذ الاستعلام : 
مثال
كيفية حماية  قيم الاستعلام باستخدام العنصر النائب ؟ علامة الاستفهام  طريقة:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "myusername",
  password: "mypassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var adr = 'Mountain 21';
  //Escape the address value:
  var sql = 'SELECT * FROM customers WHERE address = ?';
  //Send an array with value(s) to replace the escaped values:
  con.query(sql, [adr], function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});
احفظ الملف باسم "demo_db_where_placeholder.js" وشغل الملف
C:\Users\My Name>node demo_db_where_placeholder.js
النتيجة
[
  { id: 4, name: 'Hannah', address: 'Mountain 21'}
]
إذا كان لديك عدة عناصر نائبة ، فإن المصفوفة تحتوي على قيم متعددة ، بهذا الترتيب:
مثال
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "myusername",
  password: "mypassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var name = 'Amy';
  var adr = 'Mountain 21';
  //Escape the name and the address values:
  var sql = 'SELECT * FROM customers WHERE name = ? OR address = ?';
  //Send an array with value(s) to replace the escaped values:
  con.query(sql, [name, adr], function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});
 جلب البيانات من قاعدة البيانات (Node.js (MySQL 
لتحديد البيانات من جدول في MySQL ، استخدم  الامر "SELECT".
مثال
حدد جميع السجلات من جدول "customers" ، وتخزينها في  result object :  
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});
الامر SELECT * سيرجع جميع البيانات من جدول "customers"
احفظ الكود أعلاه في ملف يسمى "demo_db_select.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_select.js
لتكون النتيجة بالشكل التالي
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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(result);
  });
});[
  { id: 1, name: 'John', address: 'Highway 71'},
  { id: 2, name: 'Peter', address: 'Lowstreet 4'},
  { id: 3, name: 'Amy', address: 'Apple st 652'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 5, name: 'Michael', address: 'Valley 345'},
  { id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
  { id: 7, name: 'Betty', address: 'Green Grass 1'},
  { id: 8, name: 'Richard', address: 'Sky st 331'},
  { id: 9, name: 'Susan', address: 'One way 98'},
  { id: 10, name: 'Vicky', address: 'Yellow Garden 2'},
  { id: 11, name: 'Ben', address: 'Park Lane 38'},
  { id: 12, name: 'William', address: 'Central st 954'},
  { id: 13, name: 'Chuck', address: 'Main Road 989'},
  { id: 14, name: 'Viola', address: 'Sideway 1633'}
]
اختيار الأعمدة المحددة
لتحديد بعض الأعمدة  فقط في جدول ، استخدم عبارة "SELECT" متبوعة باسم العمود.

مثال
حدد الاسم والعنوان من جدول "customers" ، واعرض كائن الإرجاع result:
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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(result);
  });
});
احفظ الكود أعلاه في ملف يسمى "demo_db_select2.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_select2.js
لتكون النتيجة كما في مثال التالي
[
  { name: 'John', address: 'Highway 71'},
  { name: 'Peter', address: 'Lowstreet 4'},
  { name: 'Amy', address: 'Apple st 652'},
  { name: 'Hannah', address: 'Mountain 21'},
  { name: 'Michael', address: 'Valley 345'},
  { name: 'Sandy', address: 'Ocean blvd 2'},
  { name: 'Betty', address: 'Green Grass 1'},
  { name: 'Richard', address: 'Sky st 331'},
  { name: 'Susan', address: 'One way 98'},
  { name: 'Vicky', address: 'Yellow Garden 2'},
  { name: 'Ben', address: 'Park Lane 38'},
  { name: 'William', address: 'Central st 954'},
  { name: 'Chuck', address: 'Main Road 989'},
  { name: 'Viola', address: 'Sideway 1633'}
]
ارجاع النتيجة على شكل كائن Object
 كما ترى من نتيجة المثال في الاعلى ، فإن الكائن الناتج هوعبارة عن مصفوفة تحتوي على كل صف ككائن Object.

يمكننا عمل حلقة تكرار للوصول الى جميع الاعمدة 
للوصول الى العمود الثالث مثلا حقل  address ، ما عليك سوى الرجوع إلى خاصية عنوان كائن المصفوفة الثالثة:
مثال
console.log(result[2].address);
لتكون النتيجة بالشكل التالي
Apple st 652
كائن Fields الباراميتر الثالث
المتغير الثالث لدالة رد الاتصال هي مصفوفة تحتوي على معلومات حول كل حقل في النتيجة.

مثال
حدد جميع السجلات من جدول "العملاء" ، واعرض كائن Fields :
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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);
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_db_select_fields.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_select_fields.js
لتكون النتيجة على هذا الشكل
[
  {
    catalog: 'def',
    db: 'mydb',
    table: 'customers',
    orgTable: 'customers',
    name: 'name',
    orgName: 'name',
    charsetNr: 33,
    length: 765,
    type: 253,
    flags: 0,
    decimals: 0,
    default: undefined,
    zeroFill: false,
    protocol41: true
  },
  {
    catalog: 'def',
    db: 'mydb',
    table: 'customers',
    orgTable: 'customers',
    name: 'address',
    orgName: 'address',
    charsetNr: 33,
    length: 765,
    type: 253,
    flags: 0,
    decimals: 0,
    default: undefined,
    zeroFill: false,
    protocol41: true
  }
]
كما ترى من نتيجة المثال أعلاه ، فإن كائن  fields عبارة عن مصفوفة تحتوي على معلومات حول كل حقل ككائن. 
للوصول على سبيل المثال الى اسم الحقل الثاني بالخصوص  name  ، ما عليك سوى الرجوع إلى خاصية اسم عنصر المصفوفة الثانية:
مثال
console.log(fields[1].name); 
لتكون النتيجة
address
إدخال البيانات الى قاعدة البيانات Node.js MySQL   
إدراج  حقل  في الجدول
لملء جدول في MySQL ، استخدم الامر "INSERT INTO".
مثال
إدخال بيانات في جدول "customers":
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("تم الاتصال!");
  var sql = "INSERT INTO customers (name, address) VALUES ('Company Inc', 'Highway 37')";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("تم اضافة حقل واحد");
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_db_insert.js" ، وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_insert.js
في حال نجح الاستعلام سيطبع البرنامج
تم الاتصال!
تم اضافة حقل واحد
أدخل حقول متعددة
لإدراج أكثر من حقل باسعلام واحد ، أنشئ مصفوفة تحتوي على القيم ، وأدخل علامة استفهام ? في SQL ، والتي سيتم استبدالها بمصفوفة القيم:
أدخل قيم العملاء (الاسم والعنوان)؟

مثال
 ملء جدول "العملاء" بالبيانات:
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("تم الاتصال بنجاح!");
  var sql = "INSERT INTO customers (name, address) VALUES ?";
  var values = [
    ['John', 'Highway 71'],
    ['Peter', 'Lowstreet 4'],
    ['Amy', 'Apple st 652'],
    ['Hannah', 'Mountain 21'],
    ['Michael', 'Valley 345'],
    ['Sandy', 'Ocean blvd 2'],
    ['Betty', 'Green Grass 1'],
    ['Richard', 'Sky st 331'],
    ['Susan', 'One way 98'],
    ['Vicky', 'Yellow Garden 2'],
    ['Ben', 'Park Lane 38'],
    ['William', 'Central st 954'],
    ['Chuck', 'Main Road 989'],
    ['Viola', 'Sideway 1633']
  ];
  con.query(sql, [values], function (err, result) {
    if (err) throw err;
    console.log("عدد الحقول التي تم اضافتها: " + result.affectedRows);
  });
});
احفظ الكود أعلاه في ملف يسمى "demo_db_insert_multple.js" ، وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_insert_multiple.js
في حال نجح الاستعلام سيطبع البرنامج
تم الاتصال بنجاح!
عدد الحقول التي تم اضافتها: 14
الاستعلام المتعدد الحقول، يرجع object في 'result' .
في حال نجح الاتصال وادخال البيانات سيرجع لنا النتيجة في البرامتر (result) على شكل  كائن (Object).
يبدو الكائن الناتج الذي تم إرجاعه من المثال أعلاه كما يلي:
{
  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 
احصل على رقم id الحقل الذي اضفته 
 بالنسبة للجداول التي تحتوي على حقل معرف زيادة تلقائي ، يمكنك الحصول على معرف الصف الذي أدخلته للتو عن طريق سؤال الكائن الناتج  result .
ملاحظة: لتتمكن من الحصول على المعرف المدرج ، يمكن إدراج صف واحد فقط
مثال أدخل سجلًا في جدول "customers" ، وأعد المعرف id:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var sql = "INSERT INTO customers (name, address) VALUES ('Michelle', 'Blue Village 1')";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("  تم إدراج سجل واحد, رقم التعريف: " + result.insertId);
  });
});
احفظ الكود أعلاه في ملف باسم "demo_db_insert_id.js" ، وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_insert_id.js
لتكون التيجة على الشكل التالي

تم إدراج سجل واحد ، رقم التعريف:15
انشاء جدول في قاعدة البيانات
لإنشاء جدول في MySQL ، استخدم  الامر "CREATE TABLE".
تأكد من تحديد اسم قاعدة البيانات عند إنشاء الاتصال :
مثال
أنشئ جدولاً باسم "customers":

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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");
  });
});
احفظ الكود أعلاه في ملف يسمى "demo_create_table.js" وقم بتشغيل الملف: 
قم بتشغيل "demo_create_table.js"
C:\Users\Your Name>node demo_create_table.js
اذا نجح الاتصال سيطبع البرنامج
Connected!
Table created
المفتاح الأساسي
عند إنشاء جدول ، يجب  إنشاء عمود بمفتاح فريد لكل سجل او حقل.

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

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


var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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:

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

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

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");
  });
});
إنشاء قاعدة بيانات
لإنشاء قاعدة بيانات في MySQL ، استخدم الامر "CREATE DATABASE" ثم اسم القاعدة:
مثال
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  con.query("CREATE DATABASE mydb", function (err, result) {
    if (err) throw err;
    console.log("Database created");
  });
});
احفظ الكود أعلاه في ملف بإسم "demo_create_db.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_create_db.js
في حال نجح الاتصال وأنشاء قاعدة البيانات تيطبع البرنامج الرسالة التالية
Connected!
Database created
يمكن استخدام Node.js في تطبيقات قواعد البيانات.
تعد MySQL واحدة من أكثر قواعد البيانات شيوعًا.
قاعدة بيانات MySQL
لتتمكن من تجربة  الأوامر البرمجية ، يجب أن يكون لديك MySQL مثبتًا على جهاز الكمبيوتر الخاص بك.
يمكنك تنزيل قاعدة بيانات MySQL مجانية على  https://www.mysql.com/downloads/.
او يمكنك تنزيل سيرفر محلي (xampp ) مجاني  https://www.apachefriends.org/download.html يحتوي على MySQL
قم بتثبيت برنامج MySQL Driver
بمجرد تثبيت MySQL على جهاز الكمبيوتر الخاص بك ، يمكنك الوصول إليه باستخدام Node.js.
للوصول إلى قاعدة بيانات MySQL باستخدام Node.js ، تحتاج إلى برنامج تشغيل MySQL. سيستخدم هذا البرنامج التعليمي وحدة (module ) "mysql" ، التي يتم تنزيلها من NPM.

لتنزيل وحدة "mysql" وتثبيتها ، افتح Command Terminal وقم بتنفيذ ما يلي:
C:\Users\Your Name>npm install mysql
الآن قمت بتنزيل وتثبيت برنامج تشغيل قاعدة بيانات mysql.
يمكن لـ Node.js استخدام هذه الوحدة لمعالجة قاعدة بيانات MySQL:
var mysql = require('mysql');
إنشاء اتصال بقاعدة البيانات.
استخدم اسم المستخدم وكلمة المرور من قاعدة بيانات MySQL.
ملف demo_db_connection.js
var mysql = require('mysql');
 
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});
احفظ الكود أعلاه في ملف باسم "demo_db_connection.js" وقم بتشغيل الملف:
C:\Users\Your Name>node demo_db_connection.js
سيطبع كلمة connected! إذ كان اسم المستخدم وكلمة السر صحيحة

الآن يمكنك البدء في الاستعلام من قاعدة البيانات باستخدام  أوامر SQL.
الإستعلام من قاعدة بيانات
استخدم أوامر 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 نكتب الاستعلام الذي نريده مثل  حذف البيانات او ادخال البيانات او جلب البيانات او تحديث البيانات ...الخ


 Node.js إرسال بريد إلكتروني
مكتبة Nodemailer
تجعل مكتبة Nodemailer من السهل إرسال رسائل البريد الإلكتروني من جهاز الكمبيوتر الخاص بك.
يمكن تنزيل وحدة Nodemailer وتثبيتها باستخدام npm:
C:\Users\Your Name>npm install nodemailer 
بعد تنزيل مكتبة Nodemailer ، يمكنك تضمين المكتبة في أي تطبيق:
var nodemailer = require('nodemailer');
أرسل بريدا إلكترونيا
أنت الآن جاهز لإرسال رسائل البريد الإلكتروني من الخادم الخاص بك.

استخدم اسم المستخدم وكلمة المرور من مزود البريد الإلكتروني المحدد لإرسال بريد إلكتروني. سيوضح لك هذا البرنامج التعليمي كيفية استخدام حساب Gmail الخاص بك لإرسال بريد إلكتروني:

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

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'youremail@gmail.com',
    pass: 'yourpassword'
  }
});

var mailOptions = {
  from: 'youremail@gmail.com',
  to: 'myfriend@yahoo.com',
  subject: 'ارسال ايميل بواسطة Node.js',
  text: 'من سهل ارسال بريد للعملاء!'
};

transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log(error);
  } else {
    console.log('تم ارسال الايميل: ' + info.response);
  }
});
وهذا كل شيء! الآن خادمك قادر على إرسال رسائل البريد الإلكتروني.

إرسال بريد إلكتروني إلى أكثر من مستلم
لإرسال بريد إلكتروني إلى أكثر من مستلم ، أضفهم إلى خاصية "to" في كائن mailOptions ، مفصولة بفواصل:
مثال
أرسل بريدًا إلكترونيًا إلى أكثر من عنوان:
 var mailOptions = {
  from: 'youremail@gmail.com',
  to: 'myfriend@yahoo.com, myotherfriend@yahoo.com',
  subject: 'ارسال ايميل بواسطة Node.js',
  text: 'من السهل ارسال بريد الى العملاء!'
}
إرسال نص بتنسيق HTML
لإرسال نص بتنسيق HTML في بريدك الإلكتروني ، استخدم خاصية "html" بدلاً من خاصية "text":

مثال
إرسال بريد إلكتروني يحتوي على HTML:
var mailOptions = {
  from: 'youremail@gmail.com',
  to: 'myfriend@yahoo.com',
  subject: 'ارسال ايميل بواسطة Node.js',
  html: '<h1>مرحبا</h1><p>من السهل ارال بريد اليكتروني</p>'
}
تحميل الملفات في (Node.js) 
   مكتبة Formidable
هناك مكتبة رائعة للعمل على تحميلات الملفات ، تسمى "Formidable".
يمكن تنزيل مكتبة Formidable وتثبيتها باستخدام NPM:

C:\Users\Your Name>npm install formidable
بعد تنزيل الوحدة النمطية Formidable ، يمكنك تضمين  المكتبة في أي تطبيق تريد:
var formidable = require('formidable');
تحميل الملفات
أنت الآن جاهز لإنشاء صفحة ويب في Node.js تتيح للمستخدم تحميل الملفات إلى جهاز الكمبيوتر الخاص بك:
الخطوة 1: قم بإنشاء نموذج تحميل
قم بإنشاء ملف Node.js يكتب نموذج 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);
الخطوة 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>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
}).listen(8080);
الخطوة الثالثة: احفظ الملف
عندما يتم تحميل ملف بنجاح إلى الخادم ، يتم وضعه في مجلد مؤقت.

يمكن العثور على المسار إلى هذا الدليل في كائن "files" ، الذي تم تمريره باعتباره الوسيطة الثالثة في دالة رد الاتصال الخاصة بالطريقة parse ().

لنقل الملف إلى المجلد الذي تختاره ، استخدم وحدة نظام الملفات ، وأعد تسمية الملف:


مثال
قم بتضمين مكتبة fs ، وانقل الملف إلى المجلد الحالي:
var http = require('http');
var formidable = require('formidable');
var fs = require('fs');

http.createServer(function (req, res) {
  if (req.url == '/fileupload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
      var oldpath = files.filetoupload.path;
      var newpath = 'C:/Users/Your Name/' + files.filetoupload.name;
      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);

شاهد الشرح بالفيديو

 الأحداث (Events) في Node.js
Node.js مثالي للتطبيقات التي تعتمد على الأحداث(Events).
ماهي الأحداث في Node.js
كل إجراء يتم إجراؤه على جهاز الكمبيوتر هو حدث. مثل عند إجراء اتصال أو فتح ملف او الظغط على زر ...الخ .
يمكن للكائنات في Node.js إطلاق أحداث ، مثل الكائن readStream الذي  يرسل أحداثًا  حدث فتح ملف "open" وإغلاقه "close":
مثال
var fs = require('fs');
var rs = fs.createReadStream('./demofile.txt');
rs.on('open', function () {
  console.log('The file is open');
});
احفظ الكود في ملف "demo_events_open.js"وشغل موجه الاوامر
C:\Users\My Name>node demo_events_open.js
وحدة الأحداث (Events Module)
يحتوي Node.js على مكتبة نمطية مدمجة تسمى "Events" ، حيث يمكنك إنشاء الأحداث (Events) الخاصة بك وإستدعائها.
لتضمين وحدة الأحداث المضمنة (بالإنجليزية (built-in Events module))، استخدم الدالة require() . بالإضافة إلى ذلك ، فإن جميع خصائص وأساليب الحدث (properties and methods)  هي مثيل لكائن EventEmitter. لتتمكن من الوصول إلى هذه الخصائص والأساليب ، قم بإنشاء كائن EventEmitter:
var events = require('events');
var eventEmitter = new events.EventEmitter();
كائن (object) EventEmitter
يمكنك تعيين معالجات الأحداث للأحداث الخاصة بك باستخدام كائن EventEmitter.
في المثال أدناه قمنا بإنشاء وظيفة سيتم تنفيذها عند إطلاق حدث "scream".
لاستخدام الحدث الخاص بك  ، استخدم الدالة emit ()  .
var events = require('events');
var eventEmitter = new events.EventEmitter();
//قم بإنشاء دالة الحدث:
var myEventHandler = function () {
  console.log('I hear a scream!');
}
//قم بتعيين الحدث الخاص بك  إلى دالة حدث:
eventEmitter.on('scream', myEventHandler);
//الان يمكك تشغييل الحدث 'scream' الخاص بك :
eventEmitter.emit('scream');
احفظ الملف باسم "demo_eventemitter.js" وافتح نافذة موجه الاوامر cmd
C:\Users\My Name>node demo_eventemitter.js


 ما هو NPM؟
NPM هو مدير المكتبات والحزم المجانية  Node.js 
يستضيف موقع www.npmjs.com آلاف المكتبات المجانية للتنزيل والاستخدام.
يتم تثبيت برنامج NPM على جهاز الكمبيوتر الخاص بك عند تثبيت Node.js
اذا بدأت الدروس من الاول فانت  جاهز بالفعل للتشغيل (NPM )على جهاز الكمبيوتر الخاص بك!


ما هي المكتبات؟
تحتوي المكتبات في Node.js على جميع الملفات التي تحتاجها للوحدة النمطية (module).
الوحدات النمطية   (modules) هي مكتبات JavaScript يمكنك تضمينها في مشروعك.
تنزيل المكتبات
تنزيل  مكتبة سهل للغاية.
افتح واجهة  موجه الأوامر(cmd) واطلب من NPM تنزيل  المكتبة التي تريدها.

أريد تنزيل حزمة تسمى "الأحرف الكبيرة (upper-case)":
اختر مسار المجلد الموجود فيه مشروعك   واكتب الامر التالي في موجه الاوامر cmd
C:\Users\Your Name>npm install upper-case
الآن قمت بتنزيل وتثبيت  المكتبة الأولى الخاصة بك!
يقوم NPM بإنشاء مجلد باسم "node_modules" ، حيث سيتم وضع المكتبات التي قمت بتنزيلها. سيتم وضع جميع  المكتبات التي تقوم بتثبيتها في المستقبل في هذا المجلد.
يحتوي مشروعي الآن على بنية مجلد مثل هذا:
C:\Users\My Name\node_modules\upper-case
كيفية استخدام المكتبات  التي حملتها
بمجرد تثبيت المكتبة، تصبح جاهزة للاستخدام.
قم بتضمين حزمة "الأحرف الكبيرة " بنفس طريقة تضمين أي وحدة نمطية (module) أخرى:
var uc = require('upper-case');
قم بإنشاء ملف Node.js   يقوم بتحويل الناتج "Hello World!" إلى أحرف كبيرة:
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("Hello World!"));
  res.end();
}).listen(8080);
احفظ الملف باسم "demo_uppercase.js", وشغل موجه الاوامر cmd :
C:\Users\Your Name>node demo_uppercase.js
افتح المتصفح على الرابط التالي http://localhost:8080

شاهد الشرح في الفيديو


تعريف بسيط  url
محدد موقع المعلومات (بالإنجليزية: Uniform Resource Locator اختصاراً URL)
بواسطته يتم تحديد مواقع الانترنت. وهو ذلك العنوان الذي تكتبه في شريط العنوان للذهاب إلى مواقع الإنترنت ويسبقه تحديد البروتوكول مثال //:http أو البروتوكول //:ftp وعلى سبيل المثال عنوان هذه الصفحة هو https://itqan7.blogspot.com/ 


وحدة محدد موقع المعلومات المضمنة (Built-in URL Module)  

 تقسم وحدة  رابط الموقع (URL Module)   إلى أجزاء قابلة للقراءة. 
 لتضمين وحدة  رابط الموقع (URL Module) ،نستدعي المكتبة باستخدام  الدالة require() :
var url = require('url');

تحليل رابط الموقع  باستخدام  الدالة url.parse () ، وسيرجع لنا  كائن (object)URL مع كل جزء من العنوان كخصائص:
مثال
التقاط وتقسيم رابط الموقع إلى أجزاء يمكن قراءتها:
var url = require('url');
var adr = 'http://localhost:8080/default.htm?year=2017&amp;amp;month=february';
var q = url.parse(adr, true);
console.log(q.host); //returns 'localhost:8080'
console.log(q.pathname); //returns '/default.htm'
console.log(q.search); //returns '?year=2021&amp;amp;month=february'
var qdata = q.query; //returns an object: { year: 2021, month: 'february' }
console.log(qdata.month); //returns 'february'
احفظ الكود في ملف "demo_url.js" وشغل الملف في cmd
C:\Users\My Name>node demo_url.js
خادم الملفات وعرض الصفحات (File Server) Node.js
الآن نحن نعرف كيفية تحليل سلسلة رابط الموقع  ، وفي الدرس السابق تعلمنا كيفية جعل Node.js يعمل كخادم ملفات. دعونا نجمع بين الاثنين ، ونلتقط الصفحة التي يطلبها العميل في الرابط ونعرضها وفي حال عدم وجود الصفحة نطبع رسالة الصفحة المطلوبة غير موجودة  .
أنشئ ملفين html واحفظهما في نفس المجلد الموجود فيه مشروع  node.js.
الملف الاول باسم 'summer.html'
<!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>
قم بإنشاء ملف Node.js يفتح  الصفحة المطلوبة ويعيد المحتوى إلى العميل. إذا حدث خطأ ما او الملف غير موجود ، فقم  بطباعة خطأ 404 الصفحة غير موجودة:

في ملف demo_fileserver.js اكتب الكود التالي :

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);

احفظ الملف وقم بتشغيله على موجه الاوامر
C:\Users\Your Name>node demo_fileserver.js
افتح المتصفح على الرابط التالي http://localhost:8080/summer.html لعرض محتوى الصفحة الاولى

Summer

I love the sun!


افتح المتصفح على الرابط التالي http://localhost:8080/winter.html لعرض محتوى الصفحة الثانية

Winter

I love the snow!


شاهد الشرح بالفيديو


 وحدة نظام الملفات Node.js

Node.js كخادم ملفات

تسمح لك وحدة نظام الملفات Node.js بالعمل مع نظام الملفات على جهاز الكمبيوتر الخاص بك.
لتضمين  وحدة نظام الملفات (File System module)، استخدم الدالة require('fs')  :
var fs = require('fs');
الاستخدام الشائع لوحدة نظام الملفات  (File System module):
  • قراءة الملفات            (Read files)
  • أنشاء ملفات              (Create files)
  • تحديث الملفات          (Update files)
  • حذف الملفات            (Delete files)
  • إعادة تسمية الملفات    (Rename files)
قراءة الملفات (Read Files)
تُستخدم  fs.readFile() method لقراءة الملفات الموجودة على جهاز الكمبيوتر الخاص بك.
افترض أنه لدينا ملف HTML التالي (موجود في نفس المجلد الموجود في ملف  Node.js):
<html>
<body>
<h1>My Header</h1>
<p>My paragraph.</p>
</body>
</html>
قم بتسمية الملف بإسم "demofile1.html" أنشئ ملف Node.js يقرأ ملف HTML ، وأعد المحتوى: الكود
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
  fs.readFile('demofile1.html', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    return res.end();
  });
}).listen(8080);
احفظ ملف نود جي اس باسم "demo_readfile.js" وشغل الملف في cmd
C:\Users\Your Name\desktop\node>node demo_readfile.js
افتح المتصفح على الرابط http://localhost:8080
إنشاء الملفات (Create files)
تحتوي وحدة نظام الملفات على طرق لإنشاء ملفات جديدة:
  • fs.appendFile()
  • fs.open ()
  • fs.writeFile ()
تقوم  الدالة  fs.appendFile()  بإلحاق المحتوى المحدد بملف. إذا كان الملف غير موجود ، فسيتم إنشاء الملف جديد:
مثال
أنشئ ملفًا جديدًا باستخدام طريقة اي (method)  appendFile():
var fs = require('fs');
fs.appendFile('mynewfile1.txt', 'Hello content!', function (err) {
  if (err) throw err;
  console.log('Saved!');
});
احفظ الملف باسم "demo_fs_append.js"ثم قم بتشغيله
C:\Users\My Name\desktop\node>node demo_fs_append.js
تأخذ الدالة fs.open() علامة "علم" كمعامل ثاني ، إذا كانت العلامة "w" من أجل "كتابة" ، يتم فتح الملف المحدد للكتابة. إذا كان الملف غير موجود ، فسيتم إنشاء ملف فارغ:
مثال
أنشئ ملفًا جديدًا فارغًا باستخدام طريقة () open:
var fs = require('fs');

fs.open('mynewfile2.txt', 'w', function (err, file) {
  if (err) throw err;
  console.log('Saved!');
});
تستبدل الدالة fs.writeFile () الملف والمحتوى المحددين إذا كانا موجودين. إذا كان الملف غير موجود ، فسيتم إنشاء ملف جديد يحتوي على المحتوى المحدد:
مثال
أنشئ ملفًا جديدًا باستخدام الدالة writeFile ():
 var fs = require('fs');
fs.writeFile('mynewfile3.txt', 'Hello content!', function (err) {
  if (err) throw err;
  console.log('Saved!');
});
تحديث الملفات(Update files)
تحتوي وحدة نظام الملفات على طرق لتحديث الملفات هي:
  • fs.appendFile()
  • fs.writeFile()
تظيف الدالة fs.appendFile () المحتوى المحدد بنهاية الملف المحدد:
مثال
اظافة   "هذا هو النص الخاص بي".   في نهاية ملف "mynewfile1.txt":
var fs = require('fs');
fs.appendFile('mynewfile1.txt', ' هذا هو النص الخاص بي.', function (err) {
  if (err) throw err;
  console.log('Updated!');
});
تستبدل الدالة  fs.writeFile () الملف والمحتوى المحددين:
var fs = require('fs');
fs.writeFile('mynewfile3.txt', 'This is my text', function (err) {
  if (err) throw err;
  console.log('Replaced!');
});
حذف الملفات (Delete files) 
لحذف ملف باستخدام الوحدة النمطية لنظام الملفات(File System module) ، استخدم الدالة fs.unlink ().
الدالة fs.unlink () تحذف الملف المحدد:
مثال
حذف الملف "mynewfile2.txt":
var fs = require('fs');
fs.unlink('mynewfile2.txt', function (err) {
  if (err) throw err;
  console.log('File deleted!');
});
 إعادة تسمية الملفات (Rename files)
لإعادة تسمية ملف باستخدام وحدة نظام الملفات (File System Module)، استخدم الدالة fs.rename(). 
 الدالة fs.rename () تعيد تسمية الملف المحدد: 
 مثال 
 أعد تسمية الملف "mynewfile1.txt" إلى "myrenamedfile.txt":
var fs = require('fs');
fs.rename('mynewfile1.txt', 'myrenamedfile.txt', function (err) {
  if (err) throw err;
  console.log('File Renamed!');
});
تحميل الملفات(Upload Files)
يمكنك أيضًا استخدام Node.js لتحميل الملفات إلى جهاز الكمبيوتر الخاص بك. تعلم الكيفية في درس تحميل الملفات Node.js.



شاهد الشرح في الفيديو :