เพื่อให้ข้อเสนอแนะที่แตกต่างกันเกี่ยวกับคำขอที่แตกต่างกันเราแนะนำโมดูลประมวลผลเหตุการณ์
โมดูลมีชื่อว่า requesthandlers ก่อนอื่นเราเพิ่มฟังก์ชั่นสองตัวยึดเริ่มต้น () และอัปโหลด ()
รหัสสำหรับ quorkhandlers.js มีดังนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นเริ่มต้น () {
console.log ("เรียกสิ่งนี้เมื่อเข้าถึง /ดาว");
-
ฟังก์ชั่นอัปโหลด () {
console.log ("เรียกสิ่งนี้เมื่อเข้าถึง/อัปโหลด");
-
ExportS.Start = Start;
ExportS.UPLOAD = อัปโหลด;
ในแอปพลิเคชั่นจริงจำนวนตัวจัดการคำขอจะเพิ่มขึ้นเรื่อย ๆ แน่นอนว่าเราไม่ต้องการดำเนินการตามคำขอในเส้นทางทุกครั้งที่มี URL ใหม่หรือตัวจัดการคำขอ
การทำแผนที่กับตัวจัดการซ้ำ ๆ
นอกจากนี้เราไม่ต้องการมีจำนวนมากหากคำขอ == x จากนั้นโทรหาตัวจัดการ y ในเส้นทางซึ่งจะทำให้รหัสดูยุ่งเหยิงและไม่เป็นมืออาชีพ
ที่นี่ฉันจะใช้แนวคิดของอาร์เรย์เชื่อมโยงเพื่อจัดการกับข้อกำหนดนี้ เราผ่านชุดของตัวจัดการคำขอผ่านวัตถุและจำเป็นต้องฉีดวัตถุนี้ลงในฟังก์ชั่นเส้นทาง () ในแบบคู่กันอย่างหลวม
ก่อนอื่นแนะนำวัตถุนี้ลงในไฟล์หลัก index.js:
การคัดลอกรหัสมีดังนี้:
var server = ต้องการ ("./ เซิร์ฟเวอร์");
var เราเตอร์ = ต้องการ ("./ เราเตอร์");
var requesthandlers = ต้องการ ("./ requesthandlers");
var handle = {};
จัดการ ["/"] = requesthandlers.start;
จัดการ ["/start"] = requesthandlers.start;
จัดการ ["/อัปโหลด"] = requesthandlers.upload;
Server.Start (Router.Route, Handle);
ตัวอย่างเช่นหากฉันต้องการเพิ่มแผนที่ A /Show เพียงเพิ่มที่จับ [" /show"] requesthandlers.show;
ฮ่าฮ่ารหัสมีความกระชับและเป็นระเบียบมากขึ้นหรือไม่? -
ต่อไปเราส่งวัตถุที่จับไปยังเซิร์ฟเวอร์และเซิร์ฟเวอร์ js ได้รับการแก้ไขดังนี้:
การคัดลอกรหัสมีดังนี้:
var http = ต้องการ ("http");
var url = ต้องการ ("url");
ฟังก์ชั่นเริ่มต้น (เส้นทาง, ด้ามจับ) {
ฟังก์ชั่น onRequest (คำขอการตอบกลับ) {
var pathName = url.parse (request.url) .pathName;
console.log ("ขอ" + pathname + "ได้รับ");
เส้นทาง (ด้ามจับชื่อพา ธ );
Response.writehead (200, {"เนื้อหาประเภท": "ข้อความ/ธรรมดา"});
Response.write ("Hello World");
Response.end ();
-
http.createserver (onrequest) .Listen (8888);
console.log ("เซิร์ฟเวอร์เริ่มต้นแล้ว");
-
ExportS.Start = Start;
แก้ไขฟังก์ชั่นเส้นทาง () ในไฟล์ route.js ตามลำดับ:
การคัดลอกรหัสมีดังนี้:
เส้นทางฟังก์ชั่น (ด้ามจับชื่อพา ธ ) {
console.log ("เกี่ยวกับการกำหนดเส้นทางสำหรับ" + ชื่อพา ธ );
if (typeof handle [pathname] === 'function') {
จัดการ [ชื่อพา ธ ] ();
} อื่น {
console.log ("ไม่พบตัวจัดการคำขอสำหรับ" + ชื่อพา ธ );
-
-
exports.route = เส้นทาง;
เราผ่านวัตถุที่จับเป็นพารามิเตอร์ไปยังเซิร์ฟเวอร์จากนั้นรับตามเส้นทางและในที่สุดเส้นทางจะกำหนดว่าตัวจัดการคำขอที่สอดคล้องกับเส้นทางปัจจุบันมีอยู่หรือไม่ หากมีอยู่ให้เรียกฟังก์ชันที่เกี่ยวข้อง
เราสามารถรับฟังก์ชั่นการจัดการคำขอจากวัตถุที่ผ่านมาในลักษณะเดียวกับการรับองค์ประกอบจากอาร์เรย์เชื่อมโยงดังนั้นเราจึงมีการแสดงออกที่เรียบง่ายและราบรื่นเช่นจัดการ [ชื่อพา ธ ] ();, ซึ่งรู้สึกเหมือนที่กล่าวถึงก่อนหน้านี้: "สวัสดีโปรดช่วยฉันจัดการกับเส้นทางนี้"
ด้วยวิธีนี้เราสามารถทำการประมวลผลที่แตกต่างกันตามคำขอที่แตกต่างกัน
ในส่วนถัดไปเราจะแก้ไขรหัสเพิ่มเติมเพื่ออนุญาตให้เซิร์ฟเวอร์ทำการดำเนินการตอบรับจริง