node.js خادم http
يتيح لنا Node.js إنشاء خوادم وعملاء باستخدام واجهة برمجة التطبيقات ذات المستوى المنخفض لوحدة HTTP. عندما بدأنا في تعلم العقدة لأول مرة ، واجهنا جميعًا الرمز التالي:
نسخة الكود كما يلي:
var http = require ('http') ؛
http.createserver (وظيفة (req ، الدقة) {
res.end ('Hello World/n') ؛
}). الاستماع (3000 ، "127.0.0.1") ؛
console.log ("خادم funning على http://127.0.0.1:3000") ؛
يتضمن هذا الرمز معلومات حول وحدة HTTP ، بمعنى:
1. اطلب وحدة HTTP من قلب `node.js` وتعيين متغير للاستخدام في البرامج النصية المستقبلية.
يمكن للنص الوصول إلى بعض الطرق لاستخدام HTTP من خلال `node.js`.
2. قم بإنشاء كائن خادم ويب جديد باستخدام `createServer`
3. يمرر البرنامج النصي وظيفة مجهولة إلى الخادم ، مع إخبار كائن خادم الويب بما يحدث عندما يتلقى طلبًا
4. سطر البرنامج النصي 4 يحدد المنفذ ومضيف خادم الويب ، مما يعني أنه يمكن استخدام http: //127.0.0.1: 3000`
قم بزيارة الخادم
HTTP رأس
لكل طلب HTTP والاستجابة ، يتم إرسال رأس HTTP. يرسل رأس HTTP معلومات إضافية ، بما في ذلك نوع المحتوى ، وتاريخ إرسال الخادم إلى الاستجابة ، ورمز حالة HTTP
يحتوي رأس HTTP على الكثير من المعلومات. فيما يلي معلومات حول رأس HTTP المدرجة في صفحة Baidu الرئيسية:
منذ أن أضفت المزيد من مواقع الويب إلى صفحة Baidu الرئيسية الخاصة بي ، قد تكون البيانات هنا مختلفة عن تلك الموجودة في القراء. من هذا يمكننا أن نرى أن Baidu هو خادم ويب و BWS/1.1
فيما يلي معلومات رأس HTTP للرمز أعلاه الآن فقط:
إعادة التوجيه في node.js
في العقدة ، يمكننا بسهولة إنشاء خادم بسيط لإعادة توجيه الزوار إلى صفحة ويب أخرى ، مع الإرشادات التالية:
1. أرسل رمز استجابة 301 إلى العميل ، وأخبر العميل أن المورد قد تم نقله إلى موقع آخر ؛
2. أرسل رأس موقع لإخبار العميل بمكان إعادة التوجيه.
الرموز ذات الصلة هي كما يلي:
نسخة الكود كما يلي:
var http = require ('http') ؛
http.createserver (وظيفة (req ، الدقة) {
Res.Writehead (301 ، {
"الموقع": "http: //example-2.com/web"
}) ؛
res.end () ؛
}). الاستماع (3000 ، '127.0.0.1') ؛
console.log ("خادم funning على http://127.0.0.1:3000") ؛
افتح المتصفح وزيارة http://127.0.0.1:3000 سيتم إعادة توجيه صفحة.
الرد على طلبات مختلفة
لا يمكن لـ Node.js إنشاء استجابة واحدة فحسب ، ولكن بالنسبة لأنواع متعددة من الطلبات ، نحتاج إلى إضافة بعض الطرق إلى التطبيق. العقدة تجعل هذا واضحا باستخدام وحدات URL. تتيح لنا وحدة URL قراءة عنوان URL وتحليله ثم نفعل شيئًا مع الإخراج.
نسخة الكود كما يلي:
var url = require ('url') ؛
var requesturl = "http://example.com:1234/path؟query=string#hash"
الآن يمكننا تحليل عنوان URL المطلوب وقطع المحتوى منه ، على سبيل المثال ، للحصول على اسم المضيف ، يمكننا إدخال:
نسخة الكود كما يلي:
url.parse (requesturl). hostname
في هذا الوقت ، سيعود إلى "example.com"
للحصول على رقم المنفذ ، يمكنك الدخول:
نسخة الكود كما يلي:
url.parse (requesturl) .port
سيعود إلى "1234"
وحدة الحدث
تعتبر Node.js أفضل طريقة لتحقيق التزامن. وحدة الأحداث هي جوهر Node.js ، والعديد من الوحدات الأخرى تستخدمها لتطويق وظائف بنية الحدث. نظرًا لأن Node.js يعمل في مؤشر ترابط واحد ، يتم حظر أي رمز متزامن. لذلك ، عند كتابة رمز Node.js ، نحتاج إلى النظر في بعض القواعد البسيطة:
1. لا تمنع - `node.js` هو واحد ملولب ، وإذا تم حظر الكود ، يتوقف كل شيء آخر
2. عودة سريعة - يجب أن تعود العملية بسرعة. إذا لم تتمكن من العودة بسرعة ، فيجب عليك ترحيلها إلى عملية أخرى
تتيح وحدة الأحداث للمطورين إعداد المستمعين والمعالجات للأحداث. في العميل ، يمكننا تعيين مستمع لحدث النقر ثم القيام بشيء عند حدوث الحدث:
نسخة الكود كما يلي:
var tar = document.getElementById ("Target") ؛
tar.addeventListener ("Click" ، function () {
ALERT ("انقر فوق الحدث ، تم النقر على الهدف") ؛
}،خطأ شنيع)؛
بالطبع ، هذا مثال دون النظر في توافق IE ، وأحداث Focus Node.js أكثر شيوعًا في أحداث الشبكة ، بما في ذلك:
1. استجابة من خادم الويب
2. اقرأ البيانات من الملف
3. إرجاع البيانات من قاعدة البيانات
باستخدام وحدة الأحداث ، نحتاج أولاً إلى إنشاء مثيل EventEmitter جديد:
نسخة الكود كما يلي:
var eventEmitter = require ("الأحداث"). EventEmitter ؛
var test = new EventEmitter () ؛
بمجرد إضافة المحتوى أعلاه إلى الكود ، يمكنك إضافة الأحداث والمستمعين. يمكننا إرسال الأحداث على النحو التالي ، مثل:
نسخة الكود كما يلي:
test.emit ('msg' ، 'message send by node') ؛
المعلمة الأولى هي سلسلة تصف الحدث بحيث يمكن استخدامها لمطابقة المستمع
من أجل تلقي رسالة ، يجب إضافة مستمع ، والذي يتولى ذلك عندما يتم تشغيل الحدث ، على سبيل المثال:
نسخة الكود كما يلي:
test.on ('message' ، function (data) {
console.log (البيانات) ؛
}) ؛
تنفيذ وضع الاستماع الأساسي للاستماع إلى الوحدة النمطية AddListener/ON ، مرة واحدة ، الإزالة ، Removealllisteners ، EMIT وأنماط الاستماع الأساسية الأخرى. ليس هو نفسه الأحداث الموجودة على شجرة دوم الأمامية ، لأنها لا تحتوي على سلوكيات أحداث تنتمي إلى DOM مثل الفقاعات ، والطبقة حسب الطبقة ، ولا توجد طريقة للتعامل مع تسليم الأحداث مثل PreventDefault () ، stoppropagation () ، stopimmediatepragation () ، إلخ.
1.Lass: Events.EventEmitter: احصل على فئة EventEmitter من خلال متطلبات ("الأحداث"). EventEmitter.
2.emitter.on (الحدث ، المستمع): أضف مستمعًا إلى ذيل صفيف المستمع لحدث معين. العودة إلى باعث ، تسهيل استدعاء السلسلة ، نفس الشيء أدناه.
3.Emitter.removelistener (الحدث ، المستمع) يحذف مستمع من مجموعة المستمع لحدث ما
4.Emitter.Listeners (الحدث) إرجاع مجموعة المستمع للحدث المحدد
راجع وثائق API Node.js لمزيد من التفاصيل
يعرض الرمز التالي رسالة سرية يمكن أن تدمر ذاتيًا في غضون 5 ثوان:
نسخة الكود كما يلي:
var eventEmitter = require ("الأحداث"). EventEmitter ؛
var secretMessage = new eventemitter () ؛
secretmessage.on ('message' ، function (data) {
console.log (البيانات) ؛
}) ؛
secretmessage.on ('Destruct' ، function () {
console.log ("تم تدمير MSG!") ؛
}) ؛
secretmessage.emit ('message' ، 'هذه رسالة سرية. سوف الموت الذاتي في 5S') ؛
setTimeout (function () {
secretmessage.emit ("التدمير الذاتي") ؛
} ، 5000) ؛
في هذا البرنامج النصي ، يتم إرسال حدثين ، مع مستمعين. عند تشغيل البرنامج النصي ، يحدث حدث الرسالة ويتم معالجته بواسطة معالج "الرسالة"
يتم استخدام EventEmitter في كل مكان في Node.js ، لذلك من المهم إتقانه. تحصل Node.js على بيانات من خلال عمليات الإدخال/الإخراج وتستخدم وحدة الأحداث على نطاق واسع لدعم البرمجة غير المتزامنة
التعليمات:
س: هل هناك حد على الحد الأقصى لعدد المستمعين لحدث ما؟
ج: بشكل افتراضي ، إذا كان الحدث يحتوي على 10 مستمعين يعملون ، فسوف يصدر تحذيرًا. ومع ذلك ، يمكنك استخدام Emitter.setMaxListener (N) لتغيير هذه الكمية
س: هل يمكنني الاستماع إلى جميع الأحداث المرسلة؟
الإجابة: لا. نحتاج إلى إنشاء مستمع لكل حدث نريد الرد عليه