headerlogo

الأرشيف وأقسام الموقع
ابحث عن منشور

لوغو هايبر أكتيف


تظهر نتائج البحث هنا..
خادم Nodejs


خادم Nodejs : أسهل الطرق لتفعيل خادم javascript

2023-02-04 19:06:41 تم النشر بتاريخ

خادم Nodejs وهو محرك تم بناءه بلغة جافا سكريبت ويجيد التعامل مع الأغراض المتعددة للعتاد , كما بدوره يدعم تطبيقات قابلة للتوسع مثل تطبيقات الويب. بالتالي تعمل هذه التقنية عبر محرك v8 والتي حازت على العديد من الجوائز في عام 2012.

قام بتصميمها المهندس ريان دال في عام 2009 وتعد احدى مكتبات جوجل التي يتم تضمينها في المتصفح , بالتالي كانت فكرتها العمل في مشروع CommonJS. واستعمال لغة جافا سكريبت من خارج متصفحات الويب.

على سبيل المثال , نعتبر nodejs بمثابة تقنية خادم وليست لغة برمجة كما يروج للكثيرين , بالرغم من أنها تتقاسم بعض المهام الإضافية في إدارة العتاد إلا أنها تتبع قواعد وتعليمات لغة جافا سكريبت أثناء عمليات التنفيذ.

 

 

 



مزايا خادم nodeJS


يدعم خادم Nodejs العديد من المزايا التي تجعل من فقدانها عقبة أمام أي مشروع ويب ناجح ومن الأمثلة عليها:

  • السرعة والفاعلية في الأداء مقارنة بلغات الخادم المتعددة.
  • فتح منافذ توصيل حيّة ومباشرة.
  • توثيق عمليات الاتصال والوصول إلى شهادات الأمان.
  • الاستغناء عن طلبات الخادم من المتصفح.

نعتبر بأن جميع المزايا السابقة هي بمثابة أساسيات ووظائف لهذه التقنية , وبالرغم من قلة المصادر المتاحة على شبكة الإنترنت. إلا أن أهم ما يمكن الحصول عليه هو عمل الشيفرة بأداء يحمل عن كاهل الخادم الكثير من المهام.  


السرعة والفاعلية


قد تجد بعض الفروقات الملموسة أثناء الانتقال لبعض صفحات الويب التي تم إعدادها بواسطة nodejs. ويبدو ذلك واضحًا عند الدخول إلى المنطقة الخاصة بها, بالتالي قد تتفوق على لغة PHP وغيرها من لغات الويب في هذا الجانب.  


فتح منافذ التوصيل


توفر لك nodejs الاتصال بين العملاء عبر منافذ أو ports.يتم من خلالها تقليل عمليات الطلب التي من شأنها إرهاق الخادم.

ما يعني أداء مستقر وخالي من استغلال الموارد. وتنطبق جميع الحالات والأمثلة  على بعض المواقع الشهيرة مثل فيسبوك أو يوتيوب.

على سبيل المثال , يوفر لك حجز port على الخادم تفاعل لن توفره لك لغات الويب المتعددة , بالتالي يتم الاستماع إلى عنوان الخادم والتأثير في متغيرات الصفحة. ونعتبر الجلسات بين العملاء هي إحدى الأمثلة في تفاعل صفحات js.  


توثيق عمليات الاتصال


نعتبر بأن توثيق عمليات الاتصال واحدة من أهم المتطلبات التي يجب توفرها بكافة المواقع الالكترونية. حيث يعد تشفير البيانات مطلب رئيسي في تلك المهمة. وقد وفر لك خادم Nodejs عملية اتصال مشفرة لكافة العملاء في الجلسات.

وفي حال كانت لديك شهادات أمان مفعلة , فإن فتح قنوات الاتصال تسعى دائما للوصول إلى شهادة الأمان. وستواجه تلك المسألة عند ظهور رسائل الأخطاء أو فشل الاتصال في الخادم. مما يوفر حماية عالية لجلسات الخادم.  


الاستغناء عن طلبات الخادم


تعد طلبات الخادم من خلال المتصفح واحدة من أكثر العمليات استخدامًا في قواعد البيانات , وتتوفر في لغات الخادم المكونة مثل PHP و Python و C#. بالتالي فإن الاستمرار ببناء المواقع بناء على طلبات الخادم قد يعرض المشروع للانقطاع والسقوط عند توافد الزائرين.

عند العمل في تقنية nodejs ستجد أن لديك فرصة كبيرة للتقليل من طلبات الخادم أو حتى الاستغناء عن البعض منها , لكن يعتمد ذلك على نواة الشيفرة واللغة الأم في بناء الموقع.  


خطوات تحضير خادم nodejs


عند تفعيل خادم nodejs غالبًا ما يتم الاتصال ببعض المصادر الخاصة به على شبكة الإنترنت وتفعيل الخدمة والحزم الإضافية داخل المشروع. وسنعمل على تفعيل الخادم داخل مشروع Tutorial الذي قمنا بتعريفه في دورات سابقة.

ولكي يتسنى لنا الوصول إلى ملفات المشروع , يجب فتح شاشة الكونسول cmd, بنظام ويندوز أو Mac أو Linux. وفي الحالة الخاصة بنا سنعمل على استخدام شاشة الكونسول لنظام windows 8.1.

خادم Nodejs

تساعدك شاشة CMD في كثير أداء الكثير من المهام ,  بعد الوصول إلى ملفات المشروع كما في الصورة السابقة , نقم بإجراء تهيئة للخادم وذلك عن طريق أوامر استدعاء الحزم. بالتالي يتعين علينا وضعها في شاشة الكونسول واحدة تلو الأخرى:

npm init

npm install

npm install express

npm install mysql

npm install socket.io

npm install body-parser

 

عند تهيئة الخادم يتوجب علينا تعبئة بيانات الحزمة بالمعلومات اللازمة مثل الاسم والاصدار, بالتالي تستطيع تخطي جميع البيانات بالضغط على زر الإدخال Enter.

وعند الانتهاء قم بعمل موافقة على تخزين الحزمة بكتابة Y او Yes وزر الإدخال. الأمر npm init يفيد بعمل تهيئة وتخصيص الأماكن للمشروع.

بالتالي فإن الأمر npm install يعمل على تنصيب الحزم الأساسية. والأمر npm install express يعمل على إضافة خادم الويب الخاص بتشغيل الصفحات.

بينما الأمر npm install mysql سوف تحتاجه عند الاتصال بقواعد البيانات mysql , والأمر socket.io سنتطرق له في دورات أخرى حيث يساعد المستخدمين في تبادل معلومات الاتصال الفعالة. والأمر الأخير body-parser يفيد في تحويل بعض القيم إلى قراءات صحيحة.  


جلسات الاستماع


يوفر لك خادم nodejs الاتصال ببعض الدوال المعدة مسبقًا وذلك للمهام وأغراض الاستخدام المتعدد. ومن بعض تلك الأوامر , بروتوكولات http أو https. وهي مجموعة من المهام التي تساعد على إضافة الخادم باستخدامها ليدرك الخادم توجيه الصفحات.

يتم إجراء طلب request ولمرة واحدة , ومن خلاله نستطيع التفاعل مع الخادم لإضافة أو إلغاء أو تمرير البيانات الصفحات. وتستطيع الوصول للخادم عن طريق الكود التالي:

/**
 * Created by Mmutawe on 5/26/2022.
 */


var http = require('http');

const server = http.createServer((req , res) =>{
    console.log('request made');

    //set header content type
    res.setHeader('Content-Type' , 'text/html')
    res.write('<h3>hello world</h3>');
    res.end();
});

server.listen(3000 , 'localhost' , () =>{
   console.log('listening for request on port 3000');
});



تفيد الشيفرة السابقة بوجود عمليتين وهما الطلب والاستجابة , تذهب الطلبات إلى منفذ معد مسبقًا في الخادم ويتم الاستجابة بوسوم HTML التي تم اعدادها في البرنامج.

تأكد من وضع الشيفرة السابقة في ملف server.js ليتم تفسيرها دون ظهور الأخطاء. ولا ننسى أننا قمنا بتوجيه الخادم لمنفذ 3000.

على سبيل المثال , تستطيع الوصول لتنفيذ الشيفرة عن طريق العنوان http:localhost:3000. نود الإشارة إلى أننا نعمل على خادم محلي وفي حال كنت تريد العمل على نطاق خاص بك يجب الإشارة إلى عنوانه بدلا من localhost.

و بالتالي عند تنفيذ الشيفرة لن يعمل البرنامج , وذلك بسبب عدم تشغيل الخادم في شاشة الكونسول , ولعمل هذا الإجراء يستدعي الأمر كتابة التعليمة التالية في الكونسول:

node server.js

سيعمل هذا الأمر على تشغيل الخادم والوصول لأي تحديثات قد نتطرق لها في هذه الدورة. بالتالي سنكتفي بالحرمة node في الوقت الحالي. ونضع في الاعتبار إجراء الاتصال عند كل عملية تحديث على الشيفرة.

بالتالي وعند زيارة العنوان http:localhost:3000 ستجد العبارة الترحيبية Hello World. ولا ننسى أن وسوم HTML يمكن تضمينها عند العمل مع أي لغة ويب للخوادم.  


طباعة عبارة Hello World


تضمين الصفحات في خادم nodejs يتطلب منا إنشاء صفحة server.js و صفحة index.html بشكل أساسي وما دون ذلك هو بمثابة تخصيصات أخرى لعمليات الاتصال.

على سبيل المثال , سنعمل على إضافة صفحتي server.js و index.html في المشروع tutorial. تحتوي صفحة server.js على الشيفرة التالية:

/**
 * Created by Mmutawe on 5/26/2022.
 */


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

const server = http.createServer((req , res) =>{
    console.log('request made');

    //send an html file
    fs.readFile('./index.html' , (err , data) =>{
        if(err){
            console.log(err);
            res.end();
        }else{
            res.write(data);
            res.end();
        }
    });

});

server.listen(8080, 'localhost' , () =>{
   console.log('listening for request on port 8080');
});



وتتضمن صفحة index.html البيانات التالية:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>Welcome to first Hello world in index.html</div>
</ body >
</html >

  في حال قمنا بزيارة الصفحة localhost:8080. سنجد أن البيانات القديمة لا زالت متواجدة. لكي تعمل تحديث إلى صفحة الخادم يتطلب ذلك الضغط على CTRL+C في شاشة الكونسول ومن ثم عمل اتصال مجدد عبر الأمر node server.js.  


تحديث الاتصال بخادم nodejs


قد نلاحظ أن العملية السابقة من تنفيذ البرامج تشير إلى ظهور النتائج على النحو المطلوب. لكن تفعيل اتصال الخادم في كل عملية تحديث يعتبر أمر ممل للغاية خاصة وان كنت تريد إبقاء الخادم متصل. وفي تلك الحالة قم بفصل الخادم عبر الضغط على CTRL + C.

هناك العديد من الأدوات التي تجعل الخادم متصلا بشكل دائم ومنها nodemon او for ever. لكن في دورتنا قد تفي أداة nodemon أغراض الشرح مع بقاء الخادم متصل. لذا نقم بتنفيذ شيفرة تفعيل الأداة وهي :

npm install nodemon

ثم بعد ذلك نقدم على تفعيل الخادم مجددًا باستخدام الأمر:

nodemon server.js

وفي هذه الحالة فإن أي عملية تحديث على صفحة الاتصال يتخللها بقاء الخادم على قيد الحياة, باستثناء بعض المسائل التي قد نتطرق لها في شروحات متقدمة وهي بقاء الخادم متصلاً  حتى بعد فقدان التواصل معه.  


جلب البيانات من قواعد البيانات mysql


جميع الأنشطة الشبكية وخوادمها تحتاج إلى قواعد البيانات حيث أنها بدورها تعد عامل رئيسي لنجاح المواقع الإلكترونية وتطبيقات الويب. بالتالي فقد حقق لنا خادم nodejs خيارات متعددة في الاتصال بقواعد البيانات. على سبيل المثال , قد يفضل البعض استخدام mongodb على أن يعمل باستخدام mysql أو حتى mariadb.

وقد يروج للبعض العمل في خوادم sql server المقدمة من مايكروسوفت. لكن يبقى ما هو أهم من ذلك ألا وهي نواة المشروع الأساسية. مما يعني أن البعض يبدأ مشروع الويب بلغة javascript والبعض يحتاج بضعا من الاستثناءات ليحل خادم nodejs بدلا من PHP او مايكروسوفت ببعض المهام. بالتالي سنتطرق لاستخدام قواعد mysql لتحقق الدورة شروطها.

سنعمل على جلب العناصر من قواعد البيانات mysql وذلك في جدول قمنا بإعداده مسبقا . بالتالي تستطيع إضافة الجدول وتحقيق عملية الاتصال بنجاح قبل نسخ الشيفرة التالية:

const {createPool} = require('mysql')

const pool = createPool({

    host: "localhost" ,

    user: "root" ,

    password: ""

});




pool.query(`select * from con_tut.data_db` , (err , res)=>{

    return console.log(res);

})

  قم بالتعديل في شيفرة server.js للحصول على نتائج جملة الاستعلام السابقة. لكن نضع في الاعتبار أننا قمنا باستقبال النتائج في شاشة الكونسول لتظهر لنا العناصر كما في الصورة التالية.

خادم nodejs

نلاحظ في الصورة السابقة أننا قمنا بتمرير عناصر الجدول data db من خلال الطباعة على شاشة الكونسول. بالتالي فإن اصطحابها إلى صفحات أخرى هو أمر قابل للتحقيق باستخدام تقنيات أجاكس والتي سيتم شرحها في دورات متقدمة.

بالتالي , وعلى العكس ما يروج للبعض أن تقنية nodejs لا يمكن استخدامها مع خادم mysql.

بل على العكس من ذلك تستطيع استخدامها في أي جزء من موقع الويب الخاص بك وحتى مع وجود صفحات PHP. حيث أن الكثير من المطورين تنتابهم بعض الحيرة في التفكير مليًا بتغيير نواة مواقعهم.    


أسباب الحاجة إلى خادم nodejs


هناك بعض الأسباب التي تدفع الأشخاص لاستخدام هذه التقنية الرائجة حيث أن لها دور كبير في استغلال الموارد والتقليل من الشيفرة عديمة الفائدة ببعض سطور المواقع الالكترونية , ومنها:

  • بناء تطبيقات تفاعلية مثل المحادثات وجهات الاتصال.
  • إيقاف طلبات الخادم المستمرة عبر المؤقتات.
  • تحديث الإحصائيات والبيانات المرادفة بشكل فوري.
  • تحقيق عمليات الاتصال خارج المتصفح.

هناك العديد من المسائل التي تعيق بعض المطورين من تبني تقنية nodejs. وأهمها صعوبة تنسيق وتحديد الأماكن الخاصة بعمليات الاتصال. وربما العديد من الأشخاص يواجه صعوبة بالغة في الحصول على الموارد.

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


نماذج وأمثلة


لكي تتكرس فكرة العمل بهذه التقنية الرائجة يتسنى لنا معرفة العديد من المواقع التي تعمل بخوادم nodejs ومنها :

  • إشعارات فيسبوك ونظام المحادثات.
  • لوائح الإعجاب والتعليقات لبعض المواقع.
  • قوائم Dashboard لإدارة المنصات.
  • احصائيات Google Analytics.

بالرغم من أن الشركات السابقة تتبنى تقنية nodejs ببعض صفحاتها إلا أن هناك صفحات أخرى لا تمتلكها مثل قائمة الفيديو في يوتيوب , و Google Search Console. بل أن هناك الكثير من شركات استضافات الإنترنت لا تمتلكها أيضًا.    

الخلاصة

  • تتبنى جافا سكريبت تقنيات لا تجدها في لغات الخادم الأخرى.
  • تهانينا لك بإنهاء دورة Nodejs المستوى الأول.
  • نرجو منك تطبيق الأمثلة السابقة في المتصفح الخاص بك.

 


المراجع
  1. wikipedia^What is node js.
  2.  Dir Command in ^ windows CMD.