เส้นทาง Node.js
เราต้องการที่จะให้เส้นทางการร้องขอ URL และได้รับการโพสต์และพารามิเตอร์อื่น ๆ ที่จำเป็นแล้วต้องเหล่านี้เพื่อให้ข้อมูลเส้นทางที่จะดำเนินการรหัสตรงกัน
ดังนั้นเราจึงจำเป็นที่จะต้องดูการร้องขอ HTTP, สารสกัดจาก URL และได้รับการร้องขอพารามิเตอร์ / POST ฟังก์ชั่นนี้ควรจะเป็นส่วนหนึ่งของเส้นทางหรือเซิร์ฟเวอร์ (หรือแม้กระทั่งเป็นฟังก์ชั่นของโมดูลตัวเอง) มันมีมูลค่าการสำรวจ แต่ที่นี่มันมีกำหนดแน่นอนสำหรับเซิร์ฟเวอร์ HTTP ของเรา
ข้อมูลทั้งหมดที่เราต้องการจะรวมอยู่ในวัตถุคำขอวัตถุเป็น onRequest () อาร์กิวเมนต์แรกฟังก์ชันการเรียกกลับถูกส่งผ่านไป แต่เพื่อที่จะแก้ไขข้อมูลเหล่านี้เราต้องโมดูล Node.js เพิ่มเติมซึ่งมี URL และโมดูล QueryString
url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://localhost:8888/start?foo=bar&hello=world --- ----- | | | | querystring(string)["foo"] | | querystring(string)["hello"]
แน่นอนเรายังสามารถใช้โมดูลสตริงการสืบค้นที่จะแยกร่างของพารามิเตอร์คำขอ POST ที่เราจะแสดงให้เห็นในภายหลัง
ตอนนี้เรามา onRequest () ฟังก์ชั่นเพื่อเพิ่มตรรกะบางอย่างที่จะหาการร้องขอเบราว์เซอร์เส้นทาง URL:
var http = require("http"); var url = require("url"); function start() { function onRequest(request, response) { var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888); console.log("Server has started."); } exports.start = start;
ดีโปรแกรมของเราสามารถตอนนี้เส้นทาง URL ที่ร้องขอที่จะแยกแยะระหว่างการร้องขอแตกต่างกัน - ซึ่งได้รับอนุญาตให้เราใช้เส้นทาง (ยังไม่เสร็จ) ที่จะร้องขอไปเส้นทาง URL ที่ถูกแมปไปจัดการอ้างอิง
เราต้องการที่จะสร้างโปรแกรมประยุกต์ซึ่งหมายความว่าการร้องขอจาก / เริ่มต้นและ / อัปโหลดอาจใช้รหัสที่แตกต่างกันในการจัดการ ต่อมาเราจะเห็นวิธีการรวมองค์ประกอบเหล่านี้ร่วมกัน
ตอนนี้เราสามารถเขียนเส้นทางและสร้างไฟล์ชื่อ router.js เพิ่มต่อไปนี้:
function route(pathname) { console.log("About to route a request for " + pathname); } exports.route = route;
ในขณะที่คุณสามารถดูรหัสนี้ไม่ได้ทำอะไร แต่สำหรับตอนนี้มันควรจะเป็น เพิ่มตรรกะอื่น ๆ ในอดีตที่ผ่านมาให้ดูที่วิธีการที่จะบูรณาการการกำหนดเส้นทางและเซิร์ฟเวอร์
เราควรจะทราบว่ามีเซิร์ฟเวอร์ของเส้นทางและใช้อย่างมีประสิทธิภาพ แน่นอนเราสามารถกำหนดค่าตายตัวในลักษณะนี้ถูกผูกไว้กับการพึ่งพาเซิร์ฟเวอร์ แต่ประสบการณ์ในการเขียนโปรแกรมภาษาอื่น ๆ บอกกับเราว่ามันจะเป็นสิ่งที่เจ็บปวดมากดังนั้นเราจะใช้ฉีดพึ่งพาเพิ่มเส้นทางค่อนข้างหลวม โมดูล
อันดับแรกให้ขยายเริ่มต้นเซิร์ฟเวอร์ () ฟังก์ชั่นเพื่อให้เส้นทางการทำงานเป็นอาร์กิวเมนต์ในอดีต server.js รหัสไฟล์จะเป็นดังนี้
var http = require("http"); var url = require("url"); function start(route) { function onRequest(request, response) { var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); route(pathname); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888); console.log("Server has started."); } exports.start = start;
ในเวลาเดียวกันเราจะขยายตาม index.js ดังนั้นเส้นทางการทำงานสามารถฉีดเข้าไปในเซิร์ฟเวอร์:
var server = require("./server"); var router = require("./router"); server.start(router.route);
ที่นี่เราผ่านฟังก์ชั่นยังคงไม่ได้ทำอะไร
ถ้าตอนนี้คุณเริ่มโปรแกรมประยุกต์ (โหนด index.js จำไว้เสมอบรรทัดคำสั่ง) และจากนั้นขอ URL ที่คุณจะเห็นการประยุกต์ใช้ที่สอดคล้องกับข้อมูลการส่งออกซึ่งบ่งชี้ว่าเซิร์ฟเวอร์ HTTP ของเราอยู่แล้วโดยใช้โมดูลการกำหนดเส้นทางและจะขอ เส้นทางที่ถูกส่งผ่านไปยังเส้นทาง:
$ node index.js Server has started.
เอาท์พุทได้ถูกลบออกมากกว่าส่วนที่เกี่ยวข้องของการร้องขอ /favicon.ico น่ารำคาญมาก
เบราว์เซอร์เข้าถึง http://127.0.0.1:8888/ ผลการส่งออกมีดังนี้