في المحاضرة السابقة،
تعلمنا أساسيات الشبكات بما في ذلك تفاصيل بروتوكول HTTP.
الآن، سننظر في كيفية استخدام العقدة لإنشاء خادم HTTP.
هذا هو المكان الذي تأتي فيه وحدة HTTP الأساسية المضمنة في العقدة لمساعدتنا.
وبالإضافة إلى ذلك، سوف ننظر في اثنين من وحدات عقدة الأساسية الأخرى التي هي مفيدة
لبناء خادم هتب من استخدام عقدة.
لذا، كيف يمكننا الاستفادة من وحدة عقدة هتب؟
كما ذكرت، وحدة HTTP هي واحدة من الوحدات الأساسية المضمنة في العقدة.
لذلك، هذه هي وحدة الشبكات الأساسية التي تدعم
أساس عالي الأداء لمكدس HTTP.
لذا فإن استخدام الوحدة داخل تطبيق العقدة لدينا يتطلب
منا استيراد الوحدة إلى تطبيقنا.
لذلك هذا هو ما نقوم به من خلال قول const HTTP = تتطلب،
واسم الوحدة النمطية HTTP هناك.
الآن، بمجرد استيراد الوحدة النمطية
، تدعم وحدة HTTP هذه وظيفة CreateServer التي تأخذ،
كمعلمة، وظيفة تعمل
كدالة رد اتصال لوحدة CreateServer
وهذه الوظيفة لديها معلمتين: الطلب والاستجابة.
الطلب هو رسالة الطلب التي تأتي من
جانب العميل ويمكننا تحليل رسالة الطلب ثم استخراج
الكثير من المعلومات من رسالة الطلب واستخدامها لاتخاذ
قرارات حول كيفية بناء رسالة الاستجابة المقابلة لذلك.
يتم إنشاء رسالة الاستجابة باستخدام المعلمة الثانية هنا، الدقة،
والتي يمكننا بناء قيم الرأس المختلفة
لرسالة استجابة HTTP الخاصة بنا وكذلك نص رسالة استجابة HTTP.
الآن، لبدء تشغيل الخادم،
بمجرد إنشاء الخادم،
فإنك تقول server.listen ثم قم بتزويد رقم المنفذ
واسم المضيف للخادم والذي سيبدأ الخادم الخاص بنا.
سنلقي نظرة على بعض التفاصيل في ممارسة الأمثلة التي تلي هذه المحاضرة.
كما ذكرت، تتوفر معلومات رسالة الطلب الواردة
من خلال معلمة req التي تأخذها الدالة في طريقة CreateServer.
لذا، فإن req أو الطلب،
إذا كنت ترغب في إعطائه الاسم الكامل،
يمكنك الاتصال به كطلب ولكن بشكل عام وجدنا أنه في
الأمثلة استخدمنا req لتمثيل رسالة الطلب.
وهو يدعم على خصائص كائن جافا سكريبت مثل الرأس
والجسم وأيضا المعلومات المختلفة التي يمكن استخراجها،
وعنوان URL والطريقة التي تم طلبها من قبل موقع العميل هذا.
وردا على ذلك، يمكنك بناء الاستجابة باستخدام
كائن جافا سكريبت الاستجابة الذي يدعم وظيفة سيثيادر،
وظيفة ستاتوكود التي يمكن تعيينها إلى رمز الحالة من رسالة الاستجابة.
ثم تكتب الرسالة التي تقول
res.write وستنهي الرسالة بقول
res.end والتي تأخذ الجزء الأخير من الجسم للرسالة.
قد يكون النص الأساسي إما نص قياسي أو HTML أو
أي معلومات أخرى تريد إرفاقها داخل نص رسالة الرد تلك.
ولكن بمجرد استدعاء res.end،
يتم إرسال الرد مرة أخرى إلى العميل من خادم HTTP.
اثنين من الوحدات الأساسية الأخرى التي هي مفيدة بالنسبة لنا
عندما نقوم ببناء خادم عقدة HTTP هي وحدة مسار عقدة.
تمكننا وحدة المسار من تحديد المسار إلى ملف ومن ثم
فحص ما إذا كان الملف موجودًا أو فحص مزيد من التفاصيل حول ملف.
على سبيل المثال، امتداد الملف
والاسم وهلم جرا.
لذلك، يمكن استخدام وحدة المسار داخل
تطبيقنا من خلال طلب وحدة المسار كما هو موضح هنا.
وبعد ذلك، يدعم هذا الأساليب،
مثل على سبيل المثال، path.relove،
والتي ستقوم بتحويل مسار نسبي إلى
مسار مطلق أن المسار بأكمله إلى الملف.
يمكنك أيضا التحقق من اسم ملحق الملف عن طريق استدعاء
الدالة path.extname وتوفير مسار الملف
الذي سيتم فحص امتداد اسم الملف.
وبالمثل، فإن وحدة نظام الملفات،
مرة أخرى وحدة أساسية في عقدة،
تمكننا من قراءة وكتابة
الملفات الموجودة في نظام الملفات المحلي على الكمبيوتر.
لذلك يمكن استخدام وحدات نظام الملفات داخل
تطبيق عقدة لدينا من خلال طلب ذلك كما هو موضح هنا.
وبعد ذلك، تدعم وحدات نظام الملفات هذه العديد من الطرق
بما في ذلك طريقة للتحقق مما إذا كان الملف موجودًا في نظام الملفات المحلي أم لا.
لذا فإن fs.exists سيأخذ
FilePath كمعلمة أولى والمعلمة الثانية
هي وظيفة رد اتصال ستعود بمعلمة يمكننا تسميتها كما هي موجودة.
هذه المعلمة، موجودة، ستكون صحيحة إذا كان الملف
موجودًا وستكون false إذا كان الملف غير موجود داخل نظام الملفات المحلي.
وبالمثل، يمكنك القراءة من الملف عن طريق إنشاء دفق قراءة نظرا لمسار الملف.
لذلك يمكنك أن تقول فس.createReadStream
و فيليباث وهذا يمكن أن تكون الأنابيب في رسالة الاستجابة.
لذلك سيتم قراءة الملف من الملف
المعطى من قبل FilePath ومن ثم سيتم وضع المحتويات
في نص رسالة الاستجابة عن طريق استدعاء دالة بالسلاسل كما هو موضح هنا.
لذا، هذه بعض الأمثلة على بعض وحدات العقدة الأساسية التي ستكون
مفيدة جدًا عندما نقوم بإنشاء خادم HTTP باستخدام Node.
الآن، بعد أن نفهم بعض التفاصيل حول خادم HTTP وكيف يمكن بناؤه،
دعنا نذهب إلى التمرين،
حيث سنقوم ببناء خادم HTTP Node بسيط والذي سيخدم أولاً
بعض المعلومات الأساسية ثم بعد ذلك سنقوم بعرض الملفات
الموجودة في مجلد عام في مشروعنا.