node.js เซิร์ฟเวอร์ HTTP
node.js ช่วยให้เราสามารถสร้างเซิร์ฟเวอร์และไคลเอนต์โดยใช้ API ระดับต่ำของโมดูล HTTP เมื่อเราเริ่มเรียนรู้โหนดครั้งแรกเราทุกคนพบรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
var http = ต้องการ ('http');
http.createserver (ฟังก์ชั่น (req, res) {
Res.end ('Hello World/N');
}) ฟัง (3000, "127.0.0.1");
console.log ("เซิร์ฟเวอร์ที่สนุกสนานที่ http://127.0.0.1:3000");
รหัสนี้มีข้อมูลเกี่ยวกับโมดูล HTTP ความหมาย:
1. ขอโมดูล HTTP จากแกนกลางของ `node.js` และกำหนดตัวแปรที่จะใช้ในสคริปต์ในอนาคต
สคริปต์สามารถเข้าถึงวิธีการบางอย่างเพื่อใช้ http ผ่าน `node.js`
2. สร้างวัตถุเว็บเซิร์ฟเวอร์ใหม่โดยใช้ `CreateServer '
3. สคริปต์ส่งผ่านฟังก์ชันที่ไม่ระบุชื่อไปยังเซิร์ฟเวอร์โดยบอกวัตถุเว็บเซิร์ฟเวอร์ว่าเกิดอะไรขึ้นเมื่อใดก็ตามที่ได้รับคำขอ
4. สคริปต์บรรทัด 4 กำหนดพอร์ตและโฮสต์ของเว็บเซิร์ฟเวอร์ซึ่งหมายความว่าสามารถใช้ `http: //127.0.0.1: 3000`
เยี่ยมชมเซิร์ฟเวอร์
ส่วนหัว http
สำหรับคำขอและการตอบสนอง HTTP แต่ละรายการจะส่งส่วนหัว HTTP ส่วนหัว HTTP ส่งข้อมูลเพิ่มเติมรวมถึงประเภทเนื้อหาวันที่ที่เซิร์ฟเวอร์ส่งการตอบกลับและรหัสสถานะ HTTP
ส่วนหัว HTTP มีข้อมูลจำนวนมาก ต่อไปนี้เป็นข้อมูลเกี่ยวกับส่วนหัว http ที่รวมอยู่ในหน้าแรกของฉัน Baidu:
เนื่องจากฉันได้เพิ่มเว็บไซต์เพิ่มเติมในหน้าแรกของ Baidu ข้อมูลที่นี่อาจแตกต่างจากผู้อ่าน จากนี้เราจะเห็นว่า Baidu เป็นเว็บเซิร์ฟเวอร์และ BWS/1.1
ด้านล่างนี้เป็นข้อมูลส่วนหัว HTTP ของรหัสด้านบนตอนนี้:
การเปลี่ยนเส้นทางใน node.js
ในโหนดเราสามารถสร้างเซิร์ฟเวอร์ง่าย ๆ เพื่อเปลี่ยนเส้นทางผู้เข้าชมไปยังหน้าเว็บอื่นได้อย่างง่ายดายด้วยแนวทางต่อไปนี้:
1. ส่งรหัสตอบกลับ 301 ให้กับลูกค้าโดยบอกลูกค้าว่าทรัพยากรถูกย้ายไปยังสถานที่อื่น
2. ส่งส่วนหัวตำแหน่งเพื่อบอกลูกค้าว่าจะเปลี่ยนเส้นทางได้ที่ไหน
รหัสที่เกี่ยวข้องมีดังนี้:
การคัดลอกรหัสมีดังนี้:
var http = ต้องการ ('http');
http.createserver (ฟังก์ชั่น (req, res) {
res.writehead (301, {
'ตำแหน่ง': 'http: //example-2.com/web'
-
res.end ();
}) ฟัง (3000, '127.0.0.1');
console.log ("เซิร์ฟเวอร์ที่สนุกสนานที่ http://127.0.0.1:3000");
เปิดเบราว์เซอร์และเยี่ยมชมหน้า http://127.0.0.1:3000 จะถูกเปลี่ยนเส้นทาง
ตอบสนองต่อคำขอที่แตกต่างกัน
node.js ไม่เพียง แต่สามารถสร้างการตอบกลับเดียว แต่สำหรับคำขอหลายประเภทเราต้องเพิ่มเส้นทางบางเส้นทางไปยังแอปพลิเคชัน โหนดทำให้สิ่งนี้ตรงไปตรงมาโดยใช้โมดูล URL โมดูล URL ช่วยให้เราสามารถอ่าน URL วิเคราะห์แล้วทำอะไรกับเอาต์พุต
การคัดลอกรหัสมีดังนี้:
var url = ต้องการ ('url');
var requesturl = "http://example.com:1234/path?query=string#hash"
ตอนนี้เราสามารถวิเคราะห์ URL ที่ร้องขอและตัดเนื้อหาจากมันเพื่อรับชื่อโฮสต์เราสามารถป้อน:
การคัดลอกรหัสมีดังนี้:
url.parse (requesturl) .hostname
ในเวลานี้เขาจะกลับไปที่ "example.com"
ในการรับหมายเลขพอร์ตคุณสามารถป้อน:
การคัดลอกรหัสมีดังนี้:
url.parse (requesturl) .port
เขาจะกลับไปที่ "1234"
โมดูลเหตุการณ์
node.js ถือเป็นวิธีที่ดีที่สุดในการบรรลุพร้อมกัน โมดูลเหตุการณ์เป็นแกนหลักของ node.js และโมดูลอื่น ๆ อีกมากมายใช้เพื่อการฟังก์ชั่นสถาปัตยกรรมเหตุการณ์รอบทิศทาง เนื่องจาก node.js ทำงานในเธรดเดียวรหัสซิงโครนัสใด ๆ จะถูกบล็อก ดังนั้นเมื่อเขียนรหัส node.js เราต้องพิจารณากฎง่ายๆบางอย่าง:
1. อย่าบล็อก - `node.js` เป็นเธรดเดี่ยวและหากบล็อกรหัสทุกอย่างหยุด
2. การส่งคืนด่วน - การดำเนินการควรกลับมาอย่างรวดเร็ว หากคุณไม่สามารถส่งคืนได้อย่างรวดเร็วคุณควรย้ายไปยังกระบวนการอื่น
โมดูลกิจกรรมช่วยให้นักพัฒนาตั้งค่าผู้ฟังและโปรเซสเซอร์สำหรับกิจกรรม ในไคลเอนต์ JS เราสามารถตั้งค่าผู้ฟังสำหรับเหตุการณ์คลิกแล้วทำอะไรบางอย่างเมื่อเหตุการณ์เกิดขึ้น:
การคัดลอกรหัสมีดังนี้:
var tar = document.getElementById ("เป้าหมาย");
tar.addeventListener ("คลิก", function () {
การแจ้งเตือน ("คลิกเหตุการณ์คลิกเป้าหมายถูกคลิก");
},เท็จ);
แน่นอนว่านี่เป็นตัวอย่างโดยไม่คำนึงถึงความเข้ากันได้ของ IE และเหตุการณ์ Node.js Focus เป็นเรื่องธรรมดาสำหรับเหตุการณ์เครือข่ายรวมถึง:
1. การตอบสนองจากเว็บเซิร์ฟเวอร์
2. อ่านข้อมูลจากไฟล์
3. ส่งคืนข้อมูลจากฐานข้อมูล
การใช้โมดูลกิจกรรมเราต้องสร้างอินสแตนซ์ Eventemitter ใหม่ก่อน:
การคัดลอกรหัสมีดังนี้:
var eventemitter = ต้องการ ('เหตุการณ์') Eventemitter;
VAR TEST = New Eventemitter ();
เมื่อเพิ่มเนื้อหาข้างต้นลงในรหัสแล้วคุณสามารถเพิ่มเหตุการณ์และผู้ฟังได้ เราสามารถส่งกิจกรรมดังนี้เช่น:
การคัดลอกรหัสมีดังนี้:
test.emit ('msg', 'ข้อความส่งโดยโหนด');
พารามิเตอร์แรกคือสตริงที่อธิบายเหตุการณ์เพื่อให้สามารถใช้สำหรับการจับคู่ของผู้ฟัง
ในการรับข้อความจะต้องเพิ่มผู้ฟังซึ่งจัดการเมื่อเหตุการณ์ถูกทริกเกอร์ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
test.on ('ข้อความ', ฟังก์ชั่น (ข้อมูล) {
console.log (ข้อมูล);
-
การใช้โหมดการฟังเหตุการณ์พื้นฐานของโมดูลกิจกรรม AddListener/ON, ครั้งเดียว, RemoveListener, RemoveAlLlisteners, EMIT และโหมดการฟังเหตุการณ์พื้นฐานอื่น ๆ มันไม่เหมือนกับเหตุการณ์บนต้น DOM ส่วนหน้าเพราะมันไม่มีพฤติกรรมเหตุการณ์ที่เป็นของ DOM เช่นฟองสบู่เลเยอร์โดยการจับชั้นเลเยอร์และไม่มีวิธีจัดการการส่งเหตุการณ์เช่น PreventDefault ()
1.class: events.eventemitter: รับคลาส Eventemitter ผ่านต้องการ ('เหตุการณ์') Eventemitter
2.Emitter.on (เหตุการณ์ผู้ฟัง): เพิ่มผู้ฟังลงในหางของอาเรย์ผู้ฟังของเหตุการณ์เฉพาะ กลับไปที่ emitter อำนวยความสะดวกในการโทรในห่วงโซ่ด้านล่าง
3.Emitter.remoVelistener (Event, Listener) ลบผู้ฟังออกจากอาร์เรย์ผู้ฟังของเหตุการณ์
4.Emitter.Listeners (เหตุการณ์) ส่งคืนอาร์เรย์ฟังของเหตุการณ์ที่ระบุ
ดูเอกสาร Node.js API สำหรับรายละเอียดเพิ่มเติม
รหัสต่อไปนี้แสดงข้อความลับที่สามารถทำลายตนเองได้ภายใน 5 วินาที:
การคัดลอกรหัสมีดังนี้:
var eventemitter = ต้องการ ('เหตุการณ์') Eventemitter;
var secretMessage = new Eventemitter ();
SecretMessage.on ('ข้อความ', ฟังก์ชั่น (ข้อมูล) {
console.log (ข้อมูล);
-
SecretMessage.on ('Self Destruct', function () {
console.log ('ผงชูรสถูกทำลาย!');
-
SecretMessage.emit ('ข้อความ', 'นี่คือข้อความลับมันจะตายด้วยตนเองใน 5S');
settimeout (function () {
Secretmessage.emit ('Self Destruct');
}, 5000);
ในสคริปต์นี้มีการส่งสองเหตุการณ์โดยมีผู้ฟังสองคน เมื่อสคริปต์กำลังทำงานเหตุการณ์ข้อความจะเกิดขึ้นและประมวลผลโดยโปรเซสเซอร์ "ข้อความ"
Eventemitter ใช้ทุกที่ใน node.js ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องควบคุมมัน node.js ได้รับข้อมูลผ่านการดำเนินการ I/O และใช้โมดูลกิจกรรมอย่างกว้างขวางเพื่อรองรับการเขียนโปรแกรมแบบอะซิงโครนัส
คำถามที่พบบ่อย:
ถาม: มีการ จำกัด จำนวนผู้ฟังสูงสุดสำหรับเหตุการณ์หรือไม่?
ตอบ: โดยค่าเริ่มต้นหากเหตุการณ์มีผู้ฟัง 10 คนที่ทำงานมันจะออกคำเตือน อย่างไรก็ตามคุณสามารถใช้ emitter.setMaxListener (n) เพื่อเปลี่ยนปริมาณนี้
ถาม: ฉันสามารถฟังกิจกรรมที่ส่งทั้งหมดได้หรือไม่?
คำตอบ: ไม่เราต้องสร้างผู้ฟังสำหรับแต่ละเหตุการณ์ที่เราต้องการตอบกลับ