1. التثبيت
أولاً ، انتقل إلى http://nodejs.org للتنزيل والتثبيت. الإصدار أنا أسفل هو 0.8.14. التثبيت بسيط للغاية ، والخطوة التالية هي التالية. ثم قم بتكوين دليل التثبيت في المسار ، وسيقوم MSI بتثبيت NPM (Manager Node Package) معًا.
دليل التثبيت الخاص بي هو C:/Program Files (x86)/Nodejs. في هذا الوقت ، استخدم أمر نافذة الأوامر CMD node -v و npm -v لعرض الإصدار المثبت ضمن الأمر NPM -V
1.1. مرحبا بالعالم
قم بإنشاء ملف جديد Hello.js في دليل مشروع Node.js واكتب سطرًا من التعليمات البرمجية فيه
console.log ('hello ، nodejs.') ؛أدخل وحدة تحكم سطر الأوامر ، أدخل دليل مشروع Node.js واكتب Node Hello.js
تخرج وحدة التحكم "مرحبًا ، nodejs."
1.2. نسخة ويب من HelloWorld
قم بإنشاء HTTP.JS جديد في دليل مشروع Node.js ، والرمز كما يلي
var http = require ("http") ؛ http.createserver (function (request ، response) {response.writehead (200 ، {"content-type":ابدأ الخدمة في سطر الأوامر وانقر فوق العقدة http.js
ثم افتح شريط عنوان المتصفح وأدخل http: // localhost: 8000/، وشاهد Hello World! الإخراج على الصفحة وينجح.
يجب مزامنة إصدار Node.js مع API
رقم الإصدار من Node.js منتظم ، حتى الإصدار مستقر ، الإصدار الفردي هو إصدار غير مستقر
2 تحليل رمز HelloWorld
حسنًا ، ابدأ في تحليل خط HelloWorld الخاص بنا من الآن فصاعدًا.
إدخال الوحدات النمطية
var http = require ("http") ؛يتم استخدام طريقة المتطلبات لإدخال وحدة نمطية ، والمعلمة هي اسم الوحدة النمطية. على سبيل المثال ، يمكن تقديم وحدة نظام الملفات على النحو التالي:
var fs = require ("fs") ؛يمكننا استخدام طريقة المتطلبات () كطريقة عالمية ، ولكن في الواقع تشبه الطريقة المحلية التي تنتمي إلى وحدة معينة. وثائقها هنا: https://nodejs.org/api/Globals.html.
تقوم طريقة المتطلبات بإرجاع مثيل لوحدة معينة ، مثل طلب ("HTTP") لإرجاع مثيل HTTP. الوثائق المرجعية لحالات HTTP هنا: https://nodejs.org/api/http.html.
نرى أن وحدة HTTP لها طريقة CreateServer () ، والتي تتضمن سطر الكود الثاني لدينا.
إنشاء خادم
تقبل طريقة CreateServer () لوحدة HTTP طريقة كمعلمة ، والنموذج الأولي هو:
http.createserver ([requestListener])
requestListener هي طريقة مرتبطة بحدث طلب فئة HTTP.Server. وبهذه الطريقة ، عند وصول طلب العميل ، سيتم استدعاء requestListener.
يحتوي requestListener على معلمتين ، والنموذج الأولي للوظيفة هو كما يلي:
وظيفة (طلب ، استجابة) {} نوع طلب المعلمة الأول هو http.IncomingMessage ، والذي ينفذ واجهة Readable Stream .
نوع المعلمة الثانية هو http.ServerResponse ، والذي ينفذ واجهة Writeable Stream .
API تيار هنا: https://nodejs.org/api/stream.html. في الوقت نفسه ، فإن الطلب والاستجابة هما eventemiters ، والتي يمكن أن تنبعث منها أحداث محددة.
API Eventemitter هنا: https://nodejs.org/api/events.html#events_class_events_eventemitter. سنتحدث لاحقًا عن كيفية استخدام EventEmitter لإطلاق الأحداث ومعالجتها.
دعنا نراجع الرمز الذي أنشأناه الخادم:
http.createserver (function (request ، response) {response.writehead (200 ، {"content-type": "text/plain"}) ؛ response.write ("Hello World!)http.createserver إرجاع مثيل http.server. يمكن أن تسمح طريقة الاستماع لـ HTTP.Server للخادم الاستماع على منفذ معين ، وهو 8000 في المثال.
كما ترون ، نحن نقدم وظيفة مجهولة لطريقة CreateServer. في هذه الطريقة ، نكتب "Hello World!" رسالة إلى العميل من خلال معلمة الاستجابة.
تحليل طلبات العميل
قمنا بتحليل طريقة http.createserver في وقت سابق. معلماتها هي طريقة مع معلمتين. يمثل أحدهم الطلب الذي أرسله العميل والآخر يمثل الاستجابة للكتابة إلى العميل. لنلقي نظرة على معلمات الطلب.
الطلب هو مثيل http.IncomingMessage . من خلال هذه الحالة ، يمكننا الحصول على معلمات الطلب ، مثل طريقة HTTP ، وإصدار HTTP ، وعنوان URL ، والرأس ، وما إلى ذلك. واجهة برمجة التطبيقات المحددة هنا: https://nodejs.org/api/http.html#http_http_incomingmessage.
دعنا نلقي نظرة على تعديل HelloWorld.js (باستثناء HelloWorld2.js). الرمز كما يلي:
// إدخال وحدة HTTP var http = required ("http") ؛ // إنشاء خادم ، تحديد الوظيفة التي تتولى طلبات العميل http.createserver (وظيفة (طلب ، استجابة) {console.log ("method -" + request.method) ؛ console.log ("الإصدار -" + request.httpversion) ؛ console.log ("url -" + request.url) Response.write ("Hello World!") ؛ console.log ("Hello World STRINE استمع على المنفذ 8000") ؛كما ترون ، استخدمت كائن وحدة التحكم لإخراج بعض معلومات تصحيح الأخطاء وطريقة HTTP المطبوعة والإصدار وعنوان URL وغيرها من المعلومات. يمكنك تنفيذ Node HelloWorLd2.js ، يزور المتصفح http: // localhost: 8000 ، ثم قم بالتشغيل إلى سطر الأوامر لمعرفة المعلومات التي يتم إخراجها. أنا مثل هذا:
يمكن لـ Simple HelloWorld إرسال بعض بيانات الاستجابة إلى العميل ، ويمكنك رؤية عبارة "Hello World!" في متصفحك. يتم إرسال هذا الاستجابة إلى العميل من خلال response مثيل من http.ServerResponse .
http.ServerResponse هو أيضا Stream أو eventemitter. من خلال ذلك ، نعيد رمز حالة HTTP والبيانات ورؤوس HTTP وغيرها من المعلومات إلى العميل.
وحدة HTTP
في وحدة HTTP من node.js ، يتم كتابة سطر الحالة إلى العميل من خلال طريقة كتابة HTTP.ServerResponse. النموذج الأولي لطريقة الكتابة هو كما يلي:
استجابة. writehead (statuscode [، statusMessage] [، الرؤوس])
المعلمة الأولى من هذه الطريقة هي رمز الحالة ، وهو رقم مثل 200 و 403. المعلمات المتبقية اختيارية. المعلمة الأخيرة هي الرؤوس ، حيث يمكنك استخدام تدوين كائن JSON لكتابة بعض رؤوس HTTP ، مثل: {“Content-Type”:”text/plain”,”Content-Length”:11} . يتم استخدام أول حالة اختيارية للمعلمة لتحديد رسالة وصف الحالة ، والتي لا يمكن ملؤها.
HTTP رأس
الرأس هو بعض أزواج القيمة الرئيسية. على سبيل المثال ، فإن "نوع المحتوى" الذي نراه في HelloWorld هو علامة الرأس المستخدمة للإشارة إلى نوع البيانات ، والتي قد تتوافق مع الملفات النصية والصور ومقاطع الفيديو ، الثنائية ، وما إلى ذلك ، يتم استخدام "طول المحتوى" لتحديد طول البيانات. هناك الكثير ، مثل "التاريخ" ، "الاتصال" ، إلخ. يرجى الرجوع إلى الرابط السابق.
يمكن أيضًا تعيين الرأس بشكل منفصل باستخدام طريقة response.setHeader(name, value) .
بيانات
بعد الرأس ، هناك بيانات. ستحتوي بعض رموز الحالة ، مثل 200 ، على بعض البيانات في المستقبل. وبعضها ، مثل 301 ، 404 ، 403 ، 500 ، معظمهم ليس لديهم بيانات.
تتم كتابة البيانات مرة أخرى إلى العميل من خلال طريقة الكتابة لـ http.serverResponse ، على سبيل المثال:
استجابة.
هنا نحتاج أن نذكر أن هناك طريقتان شائعتان لترميز نقل بيانات HTTP:
قم بتعيين بيانات طول المحتوى ، ونقل البيانات الثابتة ، وضبط رأس ترميز النقل على المكونات ، ونقل البيانات في قطع القطع
مثل مثال HelloWorld الحالي ، دون تعيين رأس طول المحتوى ، فإن وحدة HTTP الخاصة بـ Node.js افتراضيات للترميز .
نستخدم أدوات مطور Chrome Browser لعرض بيانات الشبكة ، والتي يمكن رؤيتها بوضوح. كما هو مبين في الشكل أدناه:
استجابة HTTP
النقاط الثلاث التي قمت بتمييزها هي جميع معلومات رأس HTTP التي تم تمريرها إلى المتصفح بواسطة مثال HelloWorld.
نكتب البيانات إلى العميل من خلال طريقة الكتابة لـ http.serverResponse. يمكنك كتابة جميع البيانات في وقت واحد ، أو يمكنك كتابة البيانات بشكل منفصل وعدة مرات. عندما تكون كمية البيانات المراد نقلها كبيرة ، فإن الكتابة في عدة مرات هي نهج أكثر منطقية. على سبيل المثال ، إذا قمت بإرسال ملف كبير إلى العميل ، فسيكون ذلك أكثر ملاءمة للكتابة في عدة مرات. يمكنك أيضًا استخدام الميزة غير المتزامنة لـ Node.js للحصول على أداء جيد.