Rumah  >  Artikel  >  hujung hadapan web  >  Cipta pelayan nodejs dengan mudah (5): event handler_node.js

Cipta pelayan nodejs dengan mudah (5): event handler_node.js

WBOY
WBOYasal
2016-05-16 16:25:491042semak imbas

Untuk memberikan maklum balas yang berbeza kepada pengguna yang berbeza, kami memperkenalkan modul pengendali acara.

Modul ini dinamakan requestHandlers Kami mula-mula menambah dua fungsi pemegang tempat: mula() dan muat naik().

kod requestHandlers.js adalah seperti berikut:

Salin kod Kod adalah seperti berikut:

fungsi mula() {
console.log("Ini dipanggil semasa mengakses /star.");
}

muat naik fungsi() {
console.log("Ini dipanggil semasa mengakses /muat naik.");
}

exports.start = mula;
exports.upload = muat naik;

Dalam aplikasi sebenar, bilangan pengendali permintaan akan terus meningkat, dan kami pastinya tidak mahu perlu melengkapkan permintaan dalam laluan setiap kali terdapat URL baharu atau pengendali permintaan

Memetakan kepada pengendali dan melemparkannya berulang kali.

Selain itu, kami tidak mahu mempunyai banyak if request == x kemudian panggil pengendali y dalam penghalaan, yang akan menjadikan kod kelihatan kemas dan tidak profesional.

Di sini saya akan menggunakan konsep tatasusunan bersekutu untuk mengendalikan keperluan ini Kami menghantar satu siri pengendali permintaan melalui objek, dan kami perlu menyuntik objek ini ke dalam fungsi route() dengan cara yang longgar.

Kami mula-mula memperkenalkan objek ini ke dalam index.js fail utama:

Salin kod Kod adalah seperti berikut:

var pelayan = memerlukan("./server");
var penghala = memerlukan("./penghala");
var requestHandlers = memerlukan("./requestHandlers");

pemegang var = {};
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;

server.start(router.route, handle);

Contohnya, jika saya ingin menambah pemetaan /show, cuma tambah handle["/show"] requestHandlers.show dan itu sahaja;

Haha, adakah ini menjadikan kod lebih ringkas dan teratur? !

Seterusnya kami menghantar objek pemegang ke pelayan dan mengubah suai server.js seperti berikut:

Salin kod Kod adalah seperti berikut:
var http = memerlukan("http");
var url = memerlukan("url");
mulakan fungsi(laluan, pemegang) {
fungsi onRequest(permintaan, respons) {
var pathname = url.parse(request.url).pathname;
Console.log("Permintaan untuk " nama laluan " diterima.");
laluan(penangan, nama laluan);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Pelayan telah bermula.");
}
exports.start = mula;

Ubah suai fungsi route() dalam fail route.js:

Salin kod Kod adalah seperti berikut:
laluan fungsi(pemegang, nama laluan) {
console.log("Tentang menghalakan permintaan untuk " nama laluan);
if (jenis pemegang[nama laluan] === 'fungsi') {
mengendalikan[pathname]();
} lain {
console.log("Tiada pengendali permintaan ditemui untuk " nama laluan);
}
}
exports.route = laluan;

Kami menghantar objek pemegang ke pelayan sebagai parameter, yang kemudiannya diterima oleh penghala Akhirnya, penghala menentukan sama ada pengendali permintaan yang sepadan dengan laluan semasa wujud Jika ia wujud, fungsi yang sepadan dipanggil.

Kita boleh mendapatkan fungsi pemprosesan permintaan daripada objek yang diluluskan dengan cara yang sama seperti mendapatkan elemen daripada tatasusunan bersekutu, jadi kita mempunyai ungkapan yang mudah dan lancar seperti handle[pathname]();, yang terasa seperti Seperti yang dinyatakan sebelum ini: "Hei, tolong saya dengan jalan ini".

Dengan cara ini, kami boleh mengendalikan permintaan yang berbeza secara berbeza.

Dalam bahagian seterusnya kami akan mengubah suai kod untuk membolehkan pelayan melaksanakan beberapa operasi maklum balas sebenar.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn