Latest web development tutorials

เส้นทาง 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/ ผลการส่งออกมีดังนี้