Untuk memberikan umpan balik yang berbeda tentang permintaan yang berbeda, kami memperkenalkan modul prosesor acara.
Modul ini dinamai Requesthandlers. Kami pertama -tama menambahkan dua fungsi placeholder, start () dan unggah ().
Kode untuk requesthandlers.js adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
fungsi start () {
console.log ("Panggil ini saat mengakses /bintang.");
}
function unggah () {
console.log ("Panggil ini saat mengakses/mengunggah.");
}
Exports.start = Mulai;
Exports.upload = unggah;
Dalam aplikasi nyata, jumlah penangan permintaan akan terus meningkat. Tentu saja, kami tidak ingin menyelesaikan permintaan di rute setiap kali ada URL baru atau penangan permintaan.
Pemetaan ke pawang berulang kali.
Selain itu, kami tidak ingin memiliki banyak jika permintaan == x lalu hubungi penangan y di rute, yang akan membuat kode terlihat berantakan dan tidak profesional.
Di sini saya akan menggunakan konsep array asosiatif untuk menangani persyaratan ini. Kami melewati serangkaian penangan permintaan melalui suatu objek dan perlu menyuntikkan objek ini ke fungsi rute () dengan cara yang digabungkan secara longgar.
Mari kita pertama -tama perkenalkan objek ini ke indeks file utama.js:
Salinan kode adalah sebagai berikut:
var server = membutuhkan ("./ server");
var router = membutuhkan ("./ router");
var requesthandlers = membutuhkan ("./ requesthandlers");
var handle = {};
menangani ["/"] = requesthandlers.start;
menangani ["/start"] = requesthandlers.start;
menangani ["/unggah"] = requesthandlers.upload;
server.start (router.route, handle);
Misalnya, jika saya ingin menambahkan peta /show, cukup tambahkan pegangan [" /show"] requesthandlers.show;
Haha, apakah kodenya jauh lebih ringkas dan tertib? Lai
Selanjutnya, kami meneruskan objek pegangan ke server, dan server.js dimodifikasi sebagai berikut:
Salinan kode adalah sebagai berikut:
var http = membutuhkan ("http");
var url = membutuhkan ("url");
fungsi start (rute, handle) {
function onRequest (request, response) {
var pathname = url.parse (request.url) .pathname;
Console.log ("Permintaan" + Pathname + "Diterima.");
rute (pegangan, pathname);
response.writeHead (200, {"tipe konten": "teks/polos"});
response.write ("halo dunia");
response.end ();
}
http.createServer (onRequest) .listen (8888);
Console.log ("Server telah dimulai.");
}
Exports.start = Mulai;
Ubah fungsi route () di file route.js yang sesuai:
Salinan kode adalah sebagai berikut:
rute fungsi (pegangan, pathname) {
console.log ("Akan merutekan permintaan untuk" + pathname);
if (typeof handle [pathname] === 'function') {
menangani [pathname] ();
} kalau tidak {
console.log ("Tidak ada penangan permintaan yang ditemukan untuk" + pathname);
}
}
Exports.Route = rute;
Kami meneruskan objek pegangan sebagai parameter ke server, kemudian menerimanya dengan rute, dan akhirnya rute menentukan apakah penangan permintaan yang sesuai dengan jalur saat ini ada atau tidak. Jika ada, hubungi fungsi yang sesuai.
Kita bisa mendapatkan fungsi penanganan permintaan dari objek yang dilewati dengan cara yang sama seperti mendapatkan elemen dari array asosiatif, jadi kami memiliki ekspresi sederhana dan halus seperti pegangan [pathname] ();, yang terasa seperti yang disebutkan sebelumnya: "Hai, tolong bantu saya menangani jalur ini".
Dengan cara ini, kita dapat membuat pemrosesan yang berbeda sesuai dengan permintaan yang berbeda.
Di bagian selanjutnya, kami akan lebih lanjut merevisi kode untuk memungkinkan server membuat beberapa operasi umpan balik yang sebenarnya.