Latest web development tutorials

الطريق نود.جي إس

نحن نريد أن نقدم توجيه طلب URL وغيرها من GET والمعلمات وظيفة المطلوبة، ثم هذه الحاجة إلى بيانات الطريق إلى أداء رمز المقابلة.

ولذلك، فإننا بحاجة إلى عرض طلب HTTP، استخراج URL وطلب GET المعلمة / POST. وينبغي أن تكون هذه الوظيفة جزءا من الطريق أو الخادم (أو حتى وظيفة من وحدة نفسها) هي حقا جديرة بالاستكشاف، ولكن هنا ومن المقرر مبدئيا أن لخادم HTTP لدينا.

يتم تضمين كافة البيانات التي نحتاجها في وجوه الطلب، يتم تمرير الكائن كما onRequest () الحجة الأولى إلى وظيفة رد الاتصال. ولكن من أجل حل هذه البيانات، نحن بحاجة إلى وحدات نود.جي إس إضافية، والتي هي رابط وحدة سلسلة استعلام مواقع المعلومات.

                   url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]

بالطبع، يمكننا أيضا استخدام وحدة سلسلة استعلام مواقع المعلومات لتحليل الجسم من المعلمات طلب POST، سوف نظهر في وقت لاحق.

الآن نأتي إلى وظيفة onRequest () لإضافة بعض المنطق للعثور على طلبات متصفح مسار URL:

var http = require("http");
var url = require("url");

function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

حسنا، يمكن تطبيق دينا الآن مسار URL طلب التمييز بين طلبات مختلفة - الذي سمح لنا لاستخدام الطريق (التي لم تكتمل بعد) لطلب لمسار URL تم تعيينه إلى معالج إشارة.

نحن نريد أن نبني التطبيقات، مما يعني أن الطلب من / تبدأ و/ تحميل قد تستخدم رمز مختلف في التعامل معها. في وقت لاحق سوف نرى كيفية دمج هذه العناصر معا.

الآن يمكن أن نكتب الطريق، وإنشاء ملف يسمى router.js، إضافة ما يلي:

function route(pathname) {
  console.log("About to route a request for " + pathname);
}

exports.route = route;

كما ترون، فإن هذا القانون لا تفعل أي شيء، ولكن الآن يجب أن يكون. إضافة المزيد من المنطق في الماضي، دعونا ننظر في كيفية دمج التوجيه والخوادم.

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

أولا، دعونا توسيع وظيفة بداية الخادم ()، حتى أن وظيفة التوجيه كحجة في الماضي، server.js كود الملف كما يلي

var http = require("http");
var url = require("url");

function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

وفي الوقت نفسه، سوف نتوسع وفقا لذلك index.js، لذلك وظيفة التوجيه يمكن حقنه في الخادم:

var server = require("./server");
var router = require("./router");

server.start(router.route);

هنا، نحن نمر وظيفة لا تزال لم تفعل أي شيء.

إذا كنت الآن بدء تشغيل التطبيق (index.js عقدة، وتذكر دائما سطر الأوامر)، ومن ثم طلب العنوان، سترى تطبيق المقابلة لمعلومات الانتاج، مما يدل على أن النص المتشعب الخادم لدينا يستخدم بالفعل وحدة التوجيه، وستطلب يتم تمرير المسار إلى المسار:

$ node index.js
Server has started.

تمت إزالة الانتاج على الجزء ذي الصلة من طلب /favicon.ico أكثر مزعج.

متصفح الوصول http://127.0.0.1:8888/، نتائج الإخراج هي كما يلي: