آمل أن يتمكن الجميع من مواصلة قراءة سلسلة المقالات الخاصة بي. هذا هو أيضا أكبر تشجيع ودعم لي. دعونا نجعل التقدم معًا ، ونجعل صداقات من خلال الأدب ، ومساعدة بعضنا البعض. حسنًا ، دعنا نذهب مباشرة إلى موضوع اليوم.
ما هو "الاتصال" وكيفية فهم البرامج الوسيطة؟ دعونا نلقي نظرة على مقالة اليوم مع الأسئلة.
كيف تفهم "الوسيطة"؟
أفهم أن الوسيطة هي شيء مشابه للمرشح ، وسيلة للتعامل مع الطلبات والاستجابات بين العميل والتطبيق.
إذا تم مقارنة عملية معالجة HTTP بمعالجة مياه الصرف الصحي ، فإن الوسيطة تشبه طبقات المرشحات. يعيد كل برامج وسيطة كتابة البيانات أو (و) بيانات الاستجابة أثناء معالجة HTTP ،
الدولة ، وتنفذ وظائف محددة.
ما هو "الاتصال"؟
يمكننا التفكير في الاتصال كمجموعة من مجموعة من الوسيطة. لكل طلب ، سيستخدم Connect طبقة الوسيطة لتصفية الطلب ، يمكن لكل منها الحصول على طلب HTTP.
قال TJ Holowaychuk عن Connect أن هناك نوعين من الوسيطة. واحد منهم هو مرشح:
تعامل المرشحات ، لكنها لا تستجيب للطلبات (فكر في سجلات الخادم).
النوع الثاني هو مزود يستجيب للطلب. يمكنك استخدام برامج وسيطة متعددة وفقًا لاحتياجاتك. سيستجيب طلب HTTP للطلب من خلال كل برامج وسيطة حتى أحد الوسيطة.
2. مقدمة إلى الوسيطة المدمجة للاتصال
فيما يلي عدة برامج وسيطة رئيسية ويتم وصف الأمثلة:
(1) ، CookieParser -------------------------------------------------------------------------------------------------------------------- Cookies يمكن أيضًا تشفير ملفات تعريف الارتباط عبر req.secret.
نسخة الكود كما يلي:
var connect = required ('./ lib/connect') ؛
تطبيق var = connect ()
.
.
req.cookies.website = "مرحبًا ، أنا BigBear!" ؛
res.end (json.stringify (req.cookies)) ؛
}). الاستماع (8888) ؛
(2) ، الجلسة
الوصف: برامج الوسيطة لإدارة الجلسة
التبعية: cookieparser
المعلمات: الخيارات
خيارات:
المفتاح: اسم ملفات تعريف الارتباط ، القيمة الافتراضية هي connect.sid
المتجر: مثيل تخزين الجلسة
سر: تشفير ملفات تعريف الارتباط الجلسة
ملف تعريف الارتباط: تكوين ملفات تعريف الارتباط للجلسة ، القيمة الافتراضية هي {path: '/' ، httponly: true ، maxage: null}
الوكيل: وكيل عكسي لملفات تعريف الارتباط الآمنة ، يتم تنفيذه من خلال X-Forwarded-Proto
خيار ملفات تعريف الارتباط:
cookie.maxage: القيمة الافتراضية خالية ، مما يشير إلى حذف ملف تعريف الارتباط عند إغلاق المتصفح.
نسخة الكود كما يلي:
var connect = required ('./ lib/connect') ؛
تطبيق var = connect ()
.use (connect.logger ('dev'))
.use (connect.cookieparser ())
.use (connect.session ({secret: '123' ، ملف تعريف الارتباط: {maxage: 60000}})))
.
if (req.session.pv) {
Res.Setheader ('نوع المحتوى' ، 'text/html') ؛
Res.Write ('Views:' + req.session.pv) ؛
res.end () ؛
req.session.pv ++ ؛
}آخر{
req.session.pv = 1 ؛
res.end ('Refresh') ؛
}
})
.listen (8888) ؛
نظرًا لأن العميل يقوم باستمرار بتحديث الصفحة "PV" وسيستمر عدد الصيانة على جانب الخادم "الجلسة" في الزيادة.
(3) ، BodyParser ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
نسخة الكود كما يلي:
var connect = require ('connect') ؛
تطبيق var = connect ()
.use (connect.bodyparser ())
.use (وظيفة (req ، الدقة) {
res.end ('req.body =>' + json.stringify (req.body)) ؛
})
.listen (8888) ؛
ثالثًا ، دعونا نأخذ مثال المقارنة ونرى فوائد استخدام الوسيطة.
نسخة الكود كما يلي:
/*
* تم تنفيذ معالجة الملفات الثابتة باستخدام Connect
*/
var connect = require ('connect') ؛
Connect (connect.static (__ dirname + '/public' )).Listen(//listen
8888 ،
وظيفة() {
console.log ('Connect stract on port 8888') ؛
}
) ؛
/*
* التنفيذ باستخدام عقدة API الأصلية
*/
var http = require ('http') ؛
http.createserver (
وظيفة (req ، الدقة) {
var url = require ('url') ؛
var fs = require ('fs') ؛
var pathname = __dirname + '/public' + url.parse (req.url) .PathName ؛
// قراءة الملفات المحلية
fs.readfile (
اسم المسار ،
دالة (خطأ ، البيانات) {
// استثناء التعامل
إذا (خطأ) {
Res.Writehead (500) ؛
res.end ('500') ؛
}
آخر {
res.end (البيانات) ؛
}
}
) ؛
}
) .listen (// الاستماع
8888 ،
وظيفة() {
console.log ('HTTP Server بدأ في المنفذ 8888') ؛
}
) ؛
على الرغم من أن واجهة برمجة تطبيقات العقدة الأصلية قد أنفقت بالفعل العديد من خطوط التعليمات البرمجية ، إلا أنها لا تزال تترك العديد من جوانب خادم الملفات الثابتة البسيط لم تتم معالجتها.
على سبيل المثال: 404 وغيرها من الاستثناءات لا تتم معالجتها ، لا يوجد التحقق من أمان مسار الملف الأساسي (في الواقع ، يمكننا الوصول إلى نظام ملفات نظام التشغيل بالكامل) ، ومعالجة الاستثناءات العالمية ، إلخ.
في الوقت نفسه ، تعاملت Connect بالفعل مع كل هذه المشاكل.
أربعة ، دعونا نلخص
(1) فهم معالجة دفق البرامج الوسيطة.
نسخة الكود كما يلي:
var app = connect () ؛
app.use (connect.staticCache ()) ؛
app.use (connect.static (__ dirname + '/public')) ؛
app.use (connect.cookieparser ()) ؛
app.use (connect.session ()) ؛
app.use (connect.query ()) ؛
app.use (connect.bodyParser ()) ؛
app.use (connect.csrf ()) ؛
app.use (function (req ، res ، next) {
// الوسيطة
}) ؛
app.listen (8888) ؛
(2) التمايز بين طرق التنفيذ الأصلية وتطبيقات الوسيطة.
(3) من خلال الأمثلة المذكورة أعلاه للأدوات الوسيطة ، يمكننا أن نفهم سيناريوهات الاستخدامات والاستخدام والإشارة إلى المستندات ذات الصلة لإتقان الاستخدام الأساسي للوسائط الوسيطة الأخرى.