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