1. การติดตั้ง
ก่อนอื่นไปที่ http://nodejs.org เพื่อดาวน์โหลดและติดตั้ง เวอร์ชันที่ฉันลงคือ 0.8.14 การติดตั้งนั้นง่ายมากขั้นตอนต่อไปคือถัดไป จากนั้นกำหนดค่าไดเรกทอรีการติดตั้งในเส้นทางและ MSI จะติดตั้ง NPM (Node Package Manager) เข้าด้วยกัน
ไดเรกทอรีการติดตั้งของฉันคือ c:/ไฟล์โปรแกรม (x86)/nodejs ในเวลานี้ให้ใช้คำสั่งหน้าต่างคำสั่ง cmd node -v และ npm -v เพื่อดูเวอร์ชันที่ติดตั้งภายใต้คำสั่ง npm -v
1.1. HelloWorld
สร้างไฟล์ใหม่ hello.js ในไดเรกทอรี Project Node.js และพิมพ์บรรทัดของรหัสในนั้น
console.log ('สวัสดี, nodejs.');ป้อนคอนโซลบรรทัดคำสั่งป้อนไดเรกทอรี Project Node.js และพิมพ์ Node Hello.js
คอนโซลเอาต์พุต "สวัสดี nodejs"
1.2. เว็บเวอร์ชันของ HelloWorld
สร้าง http.js ใหม่ในไดเรกทอรี Project Node.js รหัสมีดังนี้
var http = reghed ("http"); http.createserver (ฟังก์ชั่น (คำขอ, การตอบกลับ) {response.writehead (200, {"เนื้อหาประเภท": "ข้อความ/html"}); response.write ("Hello World!"); Response.end ();})เริ่มบริการในบรรทัดคำสั่งและคลิกโหนด http.js
จากนั้นเปิดแถบที่อยู่เบราว์เซอร์และป้อน http: // localhost: 8000/และดู Hello World! เอาต์พุตบนหน้าและประสบความสำเร็จ
เวอร์ชันของ node.js จะต้องซิงโครไนซ์กับ API
หมายเลขเวอร์ชันของ node.js เป็นปกติแม้เวอร์ชันจะเป็นเวอร์ชันที่เสถียรเวอร์ชันคี่เป็นเวอร์ชันที่ไม่เสถียร
2 การวิเคราะห์รหัส HelloWorld
ตกลงเริ่มวิเคราะห์สาย HelloWorld ของเราทีละสาย
แนะนำโมดูล
var http = ต้องการ ("http");วิธีการที่ต้องการใช้เพื่อแนะนำโมดูลและพารามิเตอร์คือชื่อของโมดูล ตัวอย่างเช่นโมดูลระบบไฟล์สามารถแนะนำได้ดังนี้:
var fs = ต้องการ ("fs");เราสามารถใช้วิธีการที่ต้องการ () เป็นวิธีการทั่วโลก แต่ในความเป็นจริงมันเป็นเหมือนวิธีการในท้องถิ่นที่เป็นของโมดูลที่แน่นอน เอกสารของมันอยู่ที่นี่: https://nodejs.org/api/globals.html
วิธีการที่ต้องการจะส่งคืนอินสแตนซ์ของโมดูลที่แน่นอนเช่นต้องการ ("http") ส่งคืนอินสแตนซ์ HTTP เอกสารอ้างอิงสำหรับอินสแตนซ์ HTTP อยู่ที่นี่: https://nodejs.org/api/http.html
เราเห็นว่าโมดูล HTTP มีวิธี CreateServer () ซึ่งเกี่ยวข้องกับรหัสบรรทัดที่สองของเรา
สร้างเซิร์ฟเวอร์
วิธี CreateServer () ของโมดูล HTTP ยอมรับวิธีการเป็นพารามิเตอร์และต้นแบบคือ:
http.createserver ([requestListener])
RequestListener เป็นวิธีที่จะเชื่อมโยงกับเหตุการณ์คำขอของคลาส HTTP.Server ด้วยวิธีนี้เมื่อคำขอของลูกค้ามาถึงผู้ร้องขอจะถูกเรียก
RequestListener มีสองพารามิเตอร์และต้นแบบฟังก์ชันมีดังนี้:
ฟังก์ชั่น (คำขอ, การตอบกลับ) {} ประเภทของคำขอพารามิเตอร์แรกคือ http.IncomingMessage ซึ่งใช้อินเทอร์เฟ Readable Stream
ประเภทของพารามิเตอร์ที่สองคือ http.ServerResponse ซึ่งใช้อินเทอร์เฟซสตรีม Writeable Stream
สตรีม API อยู่ที่นี่: https://nodejs.org/api/stream.html ในเวลาเดียวกันการร้องขอและการตอบสนองคือ Eventemitters ซึ่งสามารถปล่อยเหตุการณ์เฉพาะ
Eventemitter API อยู่ที่นี่: https://nodejs.org/api/events.html#events_class_events_eventemitter หลังจากนั้นเราจะพูดคุยเกี่ยวกับวิธีการใช้ Eventemitter เพื่อเปิดตัวและประมวลผลกิจกรรม
ลองตรวจสอบรหัสที่เราสร้างเซิร์ฟเวอร์:
http.createserver (ฟังก์ชั่น (คำขอ, การตอบสนอง) {response.writehead (200, {"เนื้อหาประเภท": "ข้อความ/ธรรมดา"}); response.write ("Hello World!"); Response.end ();}) ฟัง (8000);http.createserver ส่งคืนอินสแตนซ์ http.server วิธีการฟังของ http.server สามารถปล่อยให้เซิร์ฟเวอร์ฟังบนพอร์ตหนึ่งซึ่งเป็น 8000 ในตัวอย่าง
อย่างที่คุณเห็นเรามีฟังก์ชั่นที่ไม่ระบุชื่อเพื่อสร้างวิธีการสร้าง ในวิธีนี้เราเขียนกลับ "Hello World!" ข้อความถึงไคลเอนต์ผ่านพารามิเตอร์การตอบสนอง
วิเคราะห์คำขอของลูกค้า
เราวิเคราะห์วิธี http.createserver ก่อนหน้านี้ พารามิเตอร์ของมันเป็นวิธีที่มีสองพารามิเตอร์ หนึ่งหมายถึงคำขอที่ส่งโดยลูกค้าและอื่น ๆ แสดงถึงการตอบสนองเพื่อเขียนกลับไปยังลูกค้า ลองดูที่พารามิเตอร์คำขอ
คำขอเป็นอินสแตนซ์ของ http.IncomingMessage ผ่านอินสแตนซ์นี้เราสามารถรับพารามิเตอร์การร้องขอเช่นวิธี HTTP, รุ่น HTTP, URL, ส่วนหัว ฯลฯ API เฉพาะอยู่ที่นี่: https://nodejs.org/api/http.html#http_http_incomingMessage
ลองมาดูกันโดยการปรับเปลี่ยน helloWorld.js (บันทึกเป็น helloWorld2.js) รหัสมีดังนี้:
// แนะนำโมดูล http var http = ต้องการ ("http"); // สร้างเซิร์ฟเวอร์ระบุฟังก์ชั่นที่จัดการคำขอไคลเอนต์ http.createserver (ฟังก์ชั่น (คำขอ, การตอบกลับ) {console.log ("วิธี -" + request.method); console.log ("เวอร์ชัน -" + request.httpversion); console.log ("url -" + request.url); "ข้อความ/ธรรมดา"}); console.log ("Hello World เริ่มฟังบนพอร์ต 8000");อย่างที่คุณเห็นฉันใช้วัตถุคอนโซลเพื่อส่งออกข้อมูลการดีบักบางอย่างและวิธีการพิมพ์ HTTP รุ่น URL และข้อมูลอื่น ๆ คุณสามารถเรียกใช้ Node HelloWorld2.js, เบราว์เซอร์เยี่ยมชม http: // localhost: 8000 จากนั้นเรียกใช้ไปยังบรรทัดคำสั่งเพื่อดูว่าข้อมูลใดคือเอาต์พุต ฉันเป็นแบบนี้:
HelloWorld ที่เรียบง่ายของเราสามารถส่งข้อมูลการตอบกลับไปยังลูกค้าได้แล้วและคุณสามารถเห็นคำว่า "Hello World!" ในเบราว์เซอร์ของคุณ การตอบกลับนี้จะถูกส่งไปยังลูกค้าผ่าน response อินสแตนซ์ของ http.ServerResponse
http.ServerResponse ยังเป็น Stream หรือ Eventemitter เราส่งคืนรหัสสถานะ HTTP ข้อมูลส่วนหัว HTTP และข้อมูลอื่น ๆ ไปยังไคลเอนต์
โมดูล http
ในโมดูล HTTP ของ node.js บรรทัดสถานะจะถูกเขียนไปยังไคลเอนต์ผ่านวิธีการเขียนของ http.serverResponse ต้นแบบของวิธีการเขียนมีดังนี้:
Response.writehead (StatusCode [, StatusMessage] [, ส่วนหัว])
พารามิเตอร์แรกของวิธีนี้คือ StatesCode ซึ่งเป็นตัวเลขเช่น 200 และ 403 พารามิเตอร์ที่เหลือเป็นตัวเลือก พารามิเตอร์สุดท้ายคือส่วนหัวซึ่งคุณสามารถใช้สัญลักษณ์วัตถุ JSON เพื่อเขียนส่วนหัว HTTP บางส่วนเช่น: {“Content-Type”:”text/plain”,”Content-Length”:11} สถานะพารามิเตอร์ตัวเลือกแรกใช้เพื่อระบุข้อความคำอธิบายสถานะซึ่งไม่สามารถกรอกข้อมูลได้
ส่วนหัว http
ส่วนหัวคือคู่คีย์-ค่า ตัวอย่างเช่น "ประเภทเนื้อหา" ที่เราเห็นใน HelloWorld เป็นแท็กส่วนหัวที่ใช้เพื่อระบุชนิดข้อมูลซึ่งอาจสอดคล้องกับไฟล์ข้อความรูปภาพวิดีโอไบนารี ฯลฯ ในทำนองเดียวกัน "ความยาวเนื้อหา" ใช้เพื่อระบุความยาวของข้อมูล มีอีกมากมายเช่น "วันที่", "การเชื่อมต่อ" ฯลฯ โปรดดูลิงค์ก่อนหน้า
ส่วนหัวยังสามารถตั้งค่าแยกต่างหากโดยใช้ response.setHeader(name, value) วิธีการของ http.serverResponse และหนึ่งส่วนหัว HTTP สามารถตั้งค่าทีละครั้ง
ข้อมูล
หลังจากส่วนหัวมีข้อมูล รหัสสถานะบางอย่างเช่น 200 จะมีข้อมูลบางอย่างในอนาคต และบางอย่างเช่น 301, 404, 403, 500 ส่วนใหญ่ไม่มีข้อมูล
ข้อมูลถูกเขียนกลับไปยังไคลเอนต์ผ่านวิธีการเขียนของ http.serverResponse ตัวอย่างเช่น:
Response.Setheader ("ประเภทเนื้อหา", "ข้อความ/html");ที่นี่เราต้องพูดถึงว่ามีวิธีการเข้ารหัสการส่งข้อมูล HTTP สองวิธี:
ตั้งค่าความยาวเนื้อหาการถ่ายโอนข้อมูลที่มีความยาวคง
เช่นเดียวกับตัวอย่าง HelloWorld ปัจจุบันของเราโดยไม่ต้องตั้งค่าส่วนหัวความยาวเนื้อหาโมดูล HTTP ของ node.js เริ่มต้นเป็น chunked encoding
เราใช้เครื่องมือนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ Chrome เพื่อดูข้อมูลเครือข่ายซึ่งสามารถมองเห็นได้อย่างชัดเจน ดังที่แสดงในรูปด้านล่าง:
การตอบสนอง http
สามคะแนนที่ฉันทำเครื่องหมายไว้คือข้อมูลส่วนหัว HTTP ทั้งหมดที่ส่งผ่านไปยังเบราว์เซอร์โดยตัวอย่าง HelloWorld
เราเขียนข้อมูลไปยังไคลเอนต์ผ่านวิธีการเขียนของ http.serverResponse คุณสามารถเขียนข้อมูลทั้งหมดได้ในครั้งเดียวหรือคุณสามารถเขียนข้อมูลแยกกันและหลายครั้ง เมื่อปริมาณข้อมูลที่จะถ่ายโอนมีขนาดใหญ่การเขียนหลายครั้งเป็นวิธีที่สมเหตุสมผลมากกว่า ตัวอย่างเช่นหากคุณส่งไฟล์ขนาดใหญ่ไปยังไคลเอนต์มันเหมาะสำหรับการเขียนหลายครั้ง คุณยังสามารถใช้คุณสมบัติแบบอะซิงโครนัสของ Node.js เพื่อให้ได้ประสิทธิภาพที่ดี