Latest web development tutorials

Node.js rute

Kami ingin memberikan permintaan URL routing dan GET lainnya dan parameter POST diperlukan, maka perlu ini untuk rute data untuk melakukan kode yang sesuai.

Oleh karena itu, kita perlu melihat permintaan HTTP, ekstrak URL dan GET / POST parameter permintaan. Fungsi ini harus menjadi bagian dari rute atau server (atau bahkan sebagai fungsi dari modul itu sendiri) adalah benar-benar layak mengeksplorasi, tapi di sini itu dijadwalkan untuk server HTTP kami.

Semua data yang kita butuhkan termasuk dalam objek permintaan, objek sebagai onRequest () argumen pertama untuk fungsi callback dilewatkan. Tapi untuk menyelesaikan data ini, kita perlu Node.js modul tambahan, yang url dan modul querystring.

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

Tentu saja, kita juga bisa menggunakan modul querystring untuk mengurai tubuh parameter permintaan POST, kami akan menunjukkan nanti.

Sekarang kita sampai onRequest () fungsi untuk menambahkan beberapa logika untuk menemukan permintaan Browser path 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;

Nah, aplikasi kita dapat sekarang jalan URL yang diminta untuk membedakan antara permintaan yang berbeda - yang memungkinkan kita untuk menggunakan rute (belum selesai) untuk permintaan ke jalur URL dipetakan ke handler referensi.

Kami ingin membangun aplikasi, yang berarti bahwa permintaan dari / memulai dan / upload dapat menggunakan kode yang berbeda untuk menangani. Nanti kita akan melihat bagaimana untuk mengintegrasikan elemen-elemen ini bersama-sama.

Sekarang kita dapat menulis rute, dan membuat file bernama router.js, tambahkan berikut:

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

exports.route = route;

Seperti yang Anda lihat, kode ini tidak melakukan apa-apa, tapi untuk saat ini seharusnya. Tambahkan lebih banyak logika di masa lalu, mari kita lihat bagaimana mengintegrasikan routing dan server.

Kita harus menyadari bahwa ada server routing dan menggunakannya secara efektif. Tentu saja, kita bisa keras-kode dengan cara ini terikat untuk ketergantungan pada server, tapi pengalaman dari bahasa pemrograman lain mengatakan kepada kami akan menjadi hal yang sangat menyakitkan, jadi kita akan menggunakan injeksi ketergantungan Tambahkan rute yang relatif longgar modul.

Pertama, mari kita memperluas fungsi mulai server (), sehingga fungsi routing sebagai argumen di masa lalu, server.js file kode adalah sebagai berikut

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;

Pada saat yang sama, kami akan memperluas sesuai index.js, sehingga fungsi routing dapat disuntikkan ke server:

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

server.start(router.route);

Di sini, kami melewati fungsi masih belum melakukan apa-apa.

Jika Anda sekarang mulai aplikasi (index.js node, selalu ingat baris perintah), dan kemudian meminta URL, Anda akan melihat aplikasi yang sesuai dengan informasi output, yang menunjukkan bahwa server HTTP kami sudah menggunakan modul routing, dan akan meminta jalan dilewatkan untuk rute:

$ node index.js
Server has started.

Output telah dihapus atas bagian yang relevan dari permintaan favicon.ico lebih menyebalkan.

Browser akses http://127.0.0.1:8888/, hasil output adalah sebagai berikut: