咱們要爲路由提供請求的URL和其餘須要的GET及POST參數,隨後路由須要根據這些數據來執行相應的代碼。
所以,咱們須要查看HTTP請求,從中提取出請求的URL以及GET/POST參數。這一功能應當屬於路由仍是服務器(甚至做爲一個模塊自身的功能)確實值得探討,但這裏暫定其爲咱們的HTTP服務器的功能。
咱們須要的全部數據都會包含在request對象中,該對象做爲onRequest()回調函數的第一個參數傳遞。可是爲了解析這些數據,咱們須要額外的Node.JS模塊,它們分別是url和querystring模塊。 http://www.iis7.com/a/lm/zhanqun/ IIS7站羣大全
固然咱們也能夠用querystring模塊來解析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路徑爲基準映射處處理程序上。
在咱們所要構建的應用中,這意味着來自/start和/upload的請求可使用不一樣的代碼來處理。稍後咱們將看到這些內容是如何整合到一塊兒的。
如今咱們能夠來編寫路由了,創建一個名爲router.js的文件,添加如下內容:
function route(pathname) {
console.log("About to route a request for " + pathname);
}函數
exports.route = route;
如你所見,這段代碼什麼也沒幹,不過對於如今來講這是應該的。在添加更多的邏輯之前,咱們先來看看如何把路由和服務器整合起來。
咱們的服務器應當知道路由的存在並加以有效利用。咱們固然能夠經過硬編碼的方式將這一依賴項綁定到服務器上,可是其它語言的編程經驗告訴咱們這會是一件很是痛苦的事,所以咱們將使用依賴注入的方式較鬆散地添加路由模塊。ui