1. التحليل الافتتاحي
تتحدث هذه المقالة عن هذه الوحدات الثلاث معًا لأنها ليست طويلة جدًا ، وثانياً ، هناك تبعيات بينهما ، لذلك يتم تقديمها وتحليلها بالتسلسل. لن أقول الكثير من الهراء ، يرجى الاطلاع على الوثيقة التالية:
(1) ، "وحدة URL"
اسمحوا لي أن أحصل على القليل من الكستناء:
نسخة الكود كما يلي:
var url = require ('url') ؛
var queryurl = "http: // localhost: 8888/bb؟ name = bigbear & memo = helloWorld" ؛
console.log (typeof url.parse (queryurl)) ؛
console.log (url.parse (queryurl)) ؛
نتائج التشغيل:
نسخة الكود كما يلي:
كائن // typeof
{
البروتوكول: "HTTP:" ،
المائل: صحيح ،
المصادقة: خالية ،
المضيف: 'LocalHost: 8888' ،
الميناء: '8888' ،
اسم المضيف: 'localhost' ،
التجزئة: فارغة ،
البحث: '؟ name = bigbear & memo = helloworld' ،
الاستعلام: 'name = bigbear & memo = helloworld' ،
PathName: '/bb' ،
المسار: '/bb؟ name = bigbear & memo = helloWorld' ،
HREF: 'http: // localhost: 8888/bb؟ name = bigbear & memo = helloWorld'
}
اشرح على النحو التالي:
بروتوكول: طلب بروتوكول
المضيف: تم تحويل اسم مضيف URL إلى أحرف صغيرة ، بما في ذلك معلومات المنفذ
المصادقة: جزء معلومات المصادقة من عنوان URL
اسم المضيف: اسم المضيف من المضيف ، تم تحويله إلى أحرف صغيرة
المنفذ: جزء رقم المنفذ من المضيف
PathName: جزء المسار من عنوان URL ، الموجود بعد اسم المضيف قبل طلب الاستعلام
البحث: قسم سلسلة الاستعلام بعنوان URL ، بما في ذلك علامة الاستفهام في البداية.
المسار: يتم توصيل المسار والبحث.
الاستعلام: استعل جزء المعلمة (جزء من السلسلة بعد علامة الاستفهام) ، أو استخدم querystring.parse () لتحليل الكائن الذي تم إرجاعه.
التجزئة: الجزء التالي من عنوان URL " #" (بما في ذلك الرمز #)
API التكميلي: "url.format (urlobj)"
الوظيفة: أدخل كائن URL لإرجاع سلسلة URL المنسقة.
(2) ، "وحدة QueryString"
يتم استخدام وحدة "QueryString" لتحويل سلاسل المعلمة عناوين URL وكائنات المعلمة إلى بعضها البعض ، كما هو موضح أدناه:
نسخة الكود كما يلي:
var url = require ('url') ؛
var qs = required ('QueryString') ؛
var queryurl = "http: // localhost: 8888/bb؟ name = bigbear & memo = helloWorld" ؛
QueryUrl = url.parse (Queryurl) .query ؛
console.log (Queryurl) ؛
console.log (qs.parse (Queryurl)) ؛
نتائج التشغيل كما يلي:
نسخة الكود كما يلي:
الاسم = BigBear & Memo = HelloWorld
{
الاسم: 'BigBear' ،
المذكرة: 'HelloWorld'
}
API التكميلي:
QueryString.Stringify (OBJ ، [SEP] ، [Eq]) ----- تسلسل كائن إلى سلسلة استعلام.
يمكنك اختيار ما إذا كنت تريد تجاوز الفاصل الافتراضي ('&') والمخصص ('=').
QueryString.Stringify ({foo: 'bar' ، baz: 'qux'} ، '؛' ، ':')
QueryString.parse (STR ، [SEP] ، [Eq] ، [Options]) ----- قم بتصحيح سلسلة استعلام في كائن. يمكنك اختيار ما إذا كنت تريد تجاوز الفاصل الافتراضي ('&') والمخصص ('=').
قد يحتوي كائن الخيارات على سمة MaxKeys (الافتراضي هو 1000) ، والتي يمكن استخدامها للحد من عدد المفاتيح المعالجة. يمكن تعيينه على 0 إزالة عدد المفاتيح.
مثال: querystring.parse ('foo = bar & baz = qux & baz = quux & corge') // {foo: 'bar' ، baz: ['qux' ، 'quux'] ، corge: ''}
(3) ، "وحدة المسار"
تحتوي هذه الوحدة على مجموعة من الأدوات لمعالجة مسارات الملفات وتحويلها. تقريبا جميع الطرق فقط تحويل السلاسل ، ولن يتحقق نظام الملفات مما إذا كان المسار صحيحًا أم لا.
دعنا أولاً نتمتع بكستناء بسيط:
نسخة الكود كما يلي:
var url = require ('url') ؛
var qs = required ('QueryString') ؛
VAR PATH = مطلوب ("المسار") ؛
var queryurl = "http: // localhost: 8888/bb؟ name = bigbear & memo = helloWorld" ؛
var root = path.basename (Queryurl) ؛
console.log (الجذر) ؛ // bb؟ name = BigBear & Memo = HelloWorld
يعيد الجزء الأخير من المسار ، مقسمة بـ "/"
نسخة الكود كما يلي:
var url = require ('url') ؛
var qs = required ('QueryString') ؛
VAR PATH = مطلوب ("المسار") ؛
var queryurl = "http: // localhost: 8888/bb؟ name = bigbear & memo = helloWorld" ؛
var root = path.basename (Queryurl) ؛
console.log (الجذر) ؛ // bb؟ name = BigBear & Memo = HelloWorld
var ext = path.extName (root) ؛
console.log (ext || "ليس اسم Ext!") ؛ // ليس الاسم تحويلة!
نظرًا للعديد من واجهات برمجة التطبيقات ، يتم سرد عدد قليل فقط من تلك الشائعة الاستخدام أعلاه ، ويحتاج الجميع إلى قراءة المستند بعناية.
2. الكستناء الشامل
وصف السيناريو ---- يتلقى الخادم طلبات من مواقف مختلفة ويقوم بمعالجة مختلفة من خلال "url". الرمز كما يلي:
(1) ، إنشاء "index.html"
نسخة الكود كما يلي:
<! doctype html>
<html>
<head>
<title> BigBear </itlem>
<meta content = "ie = 8" http-equiv = "x-ua-compatible"/>
<meta http-equiv = "content-type" content = "text/html ؛ charset = utf-8">
<type type = "text/css">
ديف {
الهامش: 50 بكسل ؛
العرض: 100 ٪ ؛
الهامش: 0px ؛
الارتفاع: 120 بكسل ؛
ارتفاع الخط: 120 بكسل ؛
اللون: #ffff ؛
حجم الخط: 22px ؛
الخلفية:#ff9900 ؛
محاذاة النص: المركز ؛
}
</style>
<script src = "index.js"> </script>
</head>
<body>
<viv> مرحبًا ، دب كبير! </div>
</body>
</html>
(2) ، إنشاء "index.js"
ALERT ("Hello BB!") ؛ // جملة واحدة فقط من الكود للاختبار
(3) إنشاء "server.js"
نسخة الكود كما يلي:
var http = require ("http") ؛
var fs = require ('fs') ؛
var url = require ('url') ؛
VAR PATH = مطلوب ("المسار") ؛
http.createserver (وظيفة (طلب ، استجابة) {
طريقة var = request.method ؛
الطريقة = method.toLowerCase () ؛
var filename = path.basename (request.url) ؛
var extName = path.extName (اسم الملف) ؛
var root = "./" ؛
if ("get" == method) {
if (extname) {
fs.readfile ("./" + اسم الملف ، "UTF-8" ، الدالة (خطأ ، البيانات) {
إذا (خطأ) رمي الخطأ ؛
review.writehead (200 ، {
"نوع المحتوى": {
".CSS": "Text/CSS" ،
".js": "التطبيق/جافا سكريبت"
} [extname]
}) ؛
استجابة. write (البيانات) ؛
استجابة.
}) ؛
}
آخر{
fs.readfile (root + "index.html" ، "UTF-8" ، function (خطأ ، البيانات) {
إذا (خطأ) رمي الخطأ ؛
review.writehead (200 ، {
"نوع المحتوى": "Text/HTML"
}) ؛
استجابة. write (البيانات) ؛
استجابة.
}) ؛
}
}
آخر إذا ("post" == request.url) {
// التعامل مع المنشور هنا
}
}). الاستماع (8888) ؛
console.log ("تشغيل خادم الويب ، منفذ على ---> 8888") ؛
تشغيل Node Server.js.
ثلاثة ، دعنا نلخص
(1) فهم الاتصال بين الوحدات الثلاث أعلاه واستخدمها بمرونة.
(2) كفاءة في استخدام وحدات APIs ذات الصلة "url ، QueryString ، والمسار".
(3) ، وأؤكد أخيرًا: فهم نية الكود في المثال أعلاه ، REFACTOR باستمرار وتلخيص.