بشكل عام ، يجب أن يكون للخادم ردود مختلفة لطلبات URL المختلفة. نحتاج إلى توفير عنوان URL المطلوب وغيرها من المعلمات المطلوبة ونشر المسار ، ثم يحتاج المسار إلى تنفيذ الكود المقابل بناءً على هذه البيانات. يتم تضمين جميع البيانات التي نحتاجها في كائن الطلب ، والذي يتم تمريره كمعلمة الأولى لوظيفة رد الاتصال OnRequest (). من أجل تحليل هذه البيانات ، يجب استدعاء وحدات إضافية ، وهي وحدات URL و QueryString.
عنوان URL: هذا
الوحدة النمطية لديها أدوات المساعدة لدقة URL والحلية. تتطلب استدعاء ('url') إلى
استخدمه.
تحتوي كائنات URL المحلية على بعض أو كل الحقول التالية ، اعتمادًا على ما إذا كانت موجودة في سلسلة عنوان URL أم لا. لن تكون أي أجزاء غير موجودة في سلسلة عنوان URL في الكائن المحسّن. تظهر أمثلة لعنوان URL
'http: // user: [email protected]: 8080/p/a/t/h؟ Query = String#hash'
HREF: عنوان URL الكامل الذي تم تحليله في الأصل. كل من البروتوكول والمضيف أقل.
مثال: 'http: // user: [email protected]: 8080/p/a/t/h؟ query = string#hash'
البروتوكول: بروتوكول الطلب ، lowercased.
مثال: "http:"
المضيف: الجزء المضيف السفلي الكامل من عنوان URL ، بما في ذلك معلومات المنفذ.
مثال: 'host.com:8080'
المصادقة: جزء معلومات المصادقة بعنوان URL.
مثال: "المستخدم: تمرير"
اسم المضيف: فقط جزء اسم المضيف المنخفض من المضيف.
مثال: 'Host.com'
المنفذ: جزء رقم المنفذ من المضيف.
مثال: '8080'
PATHNAME: قسم المسار بعنوان URL ، الذي يأتي بعد المضيف وقبل الاستعلام ، بما في ذلك المقطع الأولي إذا كان موجودًا.
مثال: '/p/a/t/h'
البحث: جزء "سلسلة الاستعلام" من عنوان URL ، بما في ذلك علامة الاستفهام الرئيسية.
مثال: '؟ Query = String'
المسار: تسلسل اسم المسار والبحث.
مثال: '/p/a/t/h؟ query = string'
الاستعلام: إما جزء "params" من سلسلة الاستعلام ، أو كائن QueryString.
مثال: 'Query = string' أو {'query': 'string'}
التجزئة: الجزء "الشظية" من عنوان URL بما في ذلك التوقيع الجنيه.
مثال: '#Hash'
سوف نستخدم حقن التبعية لإضافة وحدة التوجيه بشكل أكثر فضفاضة. تسمى الوظيفة التي هي هدف التوجيه معالج الطلب. يتطلب تنفيذ معالج الطلب إنشاء وحدة نمطية تسمى requestHandlers ، والتي يمكن بالطبع تسمية أخرى. وبالنسبة لكل معالج طلب ، أضف وظيفة العنصر النائب ، ثم تصدير هذه الوظائف كطرق الوحدة النمطية ، بحيث يمكن توصيل معالج الطلب ووحدة التوجيه بالمسار ، بحيث يمكن اتباع المسار.
تجدر الإشارة بشكل خاص إلى أن سلسلة من معالجات الطلب يجب أن يتم تمريرها من خلال كائن هنا ، ويجب حقن الكائن في وظيفة Route () باستخدام طريقة مزدوجة بشكل فضفاض.
يمكننا الحصول على وظيفة معالجة الطلبات من الكائن الذي تم تمريره بنفس طريقة الحصول على عناصر من الصفيف الترابطي ، لذلك لدينا تعبير موجز وسلس مثل المقبض [pathname] () ؛. الرمز يشبه هذا:
var handled = {} handle ["/"] = requestHandlers.Start ؛ Handle ["/start"] = requestHandlers.start ؛ Handle [/expload "] = requestHandlers.upload ؛