ما هو Node.js "Connect، Express و" middleware "؟




(5)

على الرغم من معرفتي بجافا سكريبت بشكل جيد ، فأنا أخلط ما تفعله هذه المشاريع الثلاثة في نظام Node.js الإيكولوجي بالضبط . هل هو شيء مثل رف القضبان؟ يمكن للشخص يرجى توضيح؟


الجواب البسيط غبي

Connect and Express هي خوادم ويب لـ nodejs. بخلاف Apache و IIS ، يمكنهم استخدام نفس الوحدات ، التي يشار إليها باسم "الوسيطة".


نود.جي إس

Node.js هو محرك javascript للجانب الخادم.
بالإضافة إلى جميع قدرات js ، فإنه يتضمن إمكانات الشبكات (مثل HTTP) ، والوصول إلى نظام الملفات.
وهذا يختلف عن js العميل حيث يتم احتكار مهام الشبكات من قبل المستعرض ، ويحظر الوصول إلى نظام الملفات لأسباب أمنية.

node.js كخادم الويب: صريح

شيء ما يتم تشغيله في الخادم ، يفهم HTTP ويمكنه الوصول إلى الملفات الصوتية مثل خادم الويب. لكنها ليست واحدة.
لجعل node.js تتصرف وكأنه خادم ويب يجب على المرء برمجةه: التعامل مع طلبات HTTP الواردة وتقديم الاستجابات المناسبة.
هذا ما يفعله Express: فهو تنفيذ خادم الويب في js.
وبالتالي ، يشبه تنفيذ موقع ويب تكوين مسارات Express ، وبرمجة ميزات الموقع المحددة.

الوسيطة و الاتصال

تتضمن صفحات العرض عددًا من المهام. العديد من هذه المهام معروفة جيداً وشائعة جداً ، لذا فإن وحدة Connect الخاصة بالعقدة (واحدة من الوحدات المتعددة المتوفرة للتشغيل تحت العقدة) تقوم بتنفيذ هذه المهام.
شاهد العرض الحالي المثير للإعجاب:

  • مسجل طلب مسجل مع دعم شكل مخصص
  • csrf عبر الموقع طلب الحماية من التزوير
  • ضغط Gzip الوسيطة ضغط
  • basicAuth مصادقة HTTP الأساسية
  • bodyParser الموسعة طلب محلل الجسم
  • تطبيق json / json محلل
  • urlencoded application / x-www-form-urlencoded محلل
  • محلل متعدد الأجزاء متعدد الأجزاء / بيانات البيانات
  • مهلة طلب المهلة
  • محلل cookieParser
  • دعم إدارة جلسة الجلسة مع MemoryStore المجمعة
  • cookieSession دعم جلسة ملفات تعريف الارتباط
  • methodOverride faux طريقة دعم HTTP
  • يحسب responseTime وقت الاستجابة ويكشف عن طريق X-Response-Time
  • طبقة ذاكرة التخزين المؤقت staticCache لوسيطة () الوسيطة
  • ثابت ثابت خادم ملف ثابت دعم المدى وأكثر من ذلك
  • دليل الدليل قائمة الوسيطه
  • vhost virtual host sub-domain mapping middleware
  • خادم favicon للفعالية favicon (مع الرمز الافتراضي)
  • الحد من البايتات من هيئات الطلب
  • الاستعلام محلل querystring التلقائي ، ملء req.query
  • errorHandler معالج الأخطاء المرن

الاتصال هو الإطار ومن خلاله يمكنك اختيار الوحدات الفرعية (الفرعية) التي تحتاج إليها.
middleware صفحة middleware قائمة طويلة من الوسيطة الإضافية.
التعبير عن نفسه يأتي مع الوسيطة Connect الأكثر شيوعا.

ماذا أفعل؟

تثبيت node.js.
تأتي العقدة مع npm ، مدير حزمة العقدة .
سيتم تنزيل تثبيت الأمر npm install -g express وتثبيته عبر الإنترنت (راجع الدليل السريع ).
سيؤدي تشغيل express foo في سطر الأوامر (وليس في العقدة) إلى إنشاء تطبيق جاهز للتشغيل باسم foo. التغيير إلى الدليل (تم إنشاؤه حديثا) وتشغيله مع العقدة مع عقدة الأمر node <appname> ، ثم فتح http://localhost:3000 وانظر. أنت الآن في.


الجواب المقبول قديم حقا (والآن مخطئ). إليك المعلومات (مع المصدر) استنادًا إلى الإصدار الحالي من Connect (3.0) / Express (4.0).

ما يأتي مع Node.js

http / https createServer الذي يأخذ ببساطة رد اتصال (مسا ، الدقة) على سبيل المثال

var server = http.createServer(function (request, response) {

    // respond
    response.write('hello client!');
    response.end();

});

server.listen(3000);

ما يضيف الاتصال

الوسيطة هي أساسا أي برنامج يجلس بين رمز التطبيق الخاص بك وبعض API مستوى منخفض. Connect يوسع وظيفة خادم HTTP الداخلي ويضيف إطار عمل إضافي. تعمل الإضافات كبرامج وسيطة ، وبالتالي ، يعد الاتصال إطارًا وسيطيًا

الطريقة التي يتم بها ذلك بسيطة جدًا ( وفي الحقيقة الرمز قصير حقًا! ). بمجرد الاتصال var connect = require('connect'); var app = connect(); var connect = require('connect'); var app = connect(); تحصل على app وظيفة يمكنه:

  1. يمكن التعامل مع طلب وإرجاع استجابة. هذا لأنك تحصل على هذه الوظيفة
  2. لديه وظيفة العضو .use ( source ) لإدارة الإضافات ( التي تأتي من هنا بسبب هذا الخط البسيط من التعليمات البرمجية ).

بسبب 1.) يمكنك القيام بما يلي:

var app = connect();

// Register with http
http.createServer(app)
    .listen(3000);

اجمع مع 2.) لتحصل على:

var connect = require('connect');

// Create a connect dispatcher
var app = connect()
      // register a middleware
      .use(function (req, res, next) { next(); });

// Register with http
http.createServer(app)
    .listen(3000);

يوفر الاتصال وظيفة مساعدة لتسجيل نفسها مع http بحيث لا تحتاج إلى إجراء مكالمة إلى http.createServer(app) . يطلق عليه اسم listen http.listen ببساطة يخلق خادم http جديد ، والتسجيل في الاتصال http.listen الاتصال ويعيد الوسيطات إلى http.listen . من المصدر

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

لذلك ، يمكنك القيام بما يلي:

var connect = require('connect');

// Create a connect dispatcher and register with http
var app = connect()
          .listen(3000);
console.log('server running on port 3000');

لا يزال لديك http.createServer جيد القديمة مع إطار عمل ملحق في الأعلى.

ما يضيف ExpressJS

ExpressJS والاتصال هي مشاريع موازية. الاتصال هو مجرد إطار الوسيطة ، مع use وظيفة لطيفة. لا يعتمد Express على Connect ( راجع package.json ). ومع ذلك ، فإنه يفعل كل ما يتصل به:

  1. يمكن تسجيلها مع createServer مثل الاتصال حيث أنها أيضا مجرد وظيفة يمكن أن تأخذ الزوج req / res ( source ).
  2. وظيفة استخدام لتسجيل الوسيطة .
  3. وظيفة مساعدة listen لتسجيل نفسها مع HTTP

بالإضافة إلى ما يوفره الاتصال (الذي يعبر عن التكرارات) ، فإنه يحتوي على العديد من الميزات. على سبيل المثال

  1. لديه دعم محرك الرأي .
  2. لديه أفعال عالية المستوى (get / post etc.) لجهاز التوجيه الخاص به .
  3. لديه دعم إعدادات التطبيق .

الوسيطة مشتركة

تعد وظيفة use ExpressJS والاتصال متوافقة ، وبالتالي يتم مشاركة الوسيطة . كلاهما أطر الوسيطة ، والتعبير لديه أكثر من مجرد إطار وسيط بسيط .

التي ينبغي لأحد أن تستخدمها؟

رأيي: أنت على دراية كافية ^ استناداً إلى أعلاه ^ لجعل اختيارك.

  • استخدم http.createServer إذا كنت تقوم بإنشاء شيء مثل connect / expressjs من البداية.
  • استخدام الاتصال إذا كنت تأليف البرامج الوسيطة واختبار البروتوكولات وما إلى ذلك لأنها تجريد لطيفة على رأس http.createServer
  • استخدم ExpressJS إذا كنت تقوم بتأليف مواقع ويب.

معظم الناس يجب فقط استخدام ExpressJS.

ما هو الخطأ في الإجابة المقبولة

ربما كان هذا صحيحًا في وقت ما ، لكنه خطأ الآن:

هذا يرث نسخة موسعة من http.Server

خطأ. لا يمتد ذلك وكما رأيت ... يستخدمه

Express يفعل لتوصيل ما يفعله الاتصال بوحدة http

Express 4.0 لا يعتمد حتى على الاتصال. انظر قسم التوابع package.json الحالية


المعلومات ذات الصلة ، خاصةً إذا كنت تستخدم NTVS للعمل مع IDE Visual Studio. يضيف NTVS أدوات NodeJS و Express ، والسقالات ، وقوالب المشاريع إلى Visual Studio 2012 ، 2013.

أيضا ، فإن verbiage الذي يستدعي ExpressJS أو الاتصال باسم "WebServer" غير صحيح. يمكنك إنشاء خادم ويب أساسي مع أو بدونها. يمكن لبرنامج NodeJS الأساسي أيضًا استخدام وحدة http لمعالجة طلبات http ، وبذلك يصبح خادم ويب بدائي.


يوفر Connect واجهات برمجة تطبيقات "عالية المستوى" لوظائف خادم HTTP الشائعة مثل إدارة الجلسة والمصادقة وتسجيل الدخول والمزيد. Express مبني على قمة Connect بوظائف متقدمة (مثل Sinatra).





middleware