伺服器需要根據不同的URL或請求來執行不一樣的操作,我們可以透過路由來實現這個步驟。
第一步我們需要先解析出請求URL的路徑,我們引入url模組。
我們來為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;好了,pathname就是请求的路径,我们可以用它来区别不同请求了,这样一来我们就可以对来自/start和/upload的请求使用不同的代码来处理。
接著我們來寫路由,建立一個名為router. js的文件,程式碼如下:
function route(pathname) { console.log("About to route a request for " + pathname); } exports.route = route;
這段程式碼什麼都沒乾,我們先把路由和伺服器整合起來。
我們接著擴充伺服器的start()函數,在start()中運行路由函數,並將pathname作為參數傳給它。
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,隨便訪問個路徑,例如/ upload,就會發現控制台輸出,About to route a request for /upload.
這就表示我們的HTTP伺服器和請求路由模組已經可以互相交流了。
以上就是本章的全部內容,更多相關教學請訪問Node.js影片教學!