nodejs筆記2——請求路由

對於不同的URL請求,服務器應該有不同的反應。我們要為路由提供請求的URL和其他需要的GET及POST參數,隨後路由需要根據這些數據來執行相應的代碼。我們需要的所有數據都會包含在request對象中,該對象作為onRequest()回調函數的第一個參數傳遞。為瞭解析這些數據,需要調用額外的模塊,分別是url和querystring模塊。

 

URL:This

 module has utilities for URL resolution and parsing. Call require('url') to

 use it.

 

Parsed URL objects have some or all of the following fields, depending on whether or not they exist in the URL string. Any parts that are not in the URL string will not be in the parsed object. Examples are shown for the URL

 

'https://user:pass@host.com:8080/p/a/t/h?query=string#hash'

 

href: The full URL that was originally parsed. Both the protocol and host are lowercased.

Example: 'https://user:pass@host.com:8080/p/a/t/h?query=string#hash'

 

protocol: The request protocol, lowercased.

Example: 'http:'

 

host: The full lowercased host portion of the URL, including port information.

Example: 'host.com:8080'

 

auth: The authentication information portion of a URL.

Example: 'user:pass'

 

hostname: Just the lowercased hostname portion of the host.

Example: 'host.com'

 

port: The port number portion of the host.

Example: '8080'

 

pathname: The path section of the URL, that comes after the host and before the query, including the initial slash if present.

Example: '/p/a/t/h'

 

search: The 'query string' portion of the URL, including the leading question mark.

Example: '?query=string'

 

path: Concatenation of pathname and search.

Example: '/p/a/t/h?query=string'

 

query: Either the 'params' portion of the query string, or a querystring-parsed object.

Example: 'query=string' or {'query':'string'}

 

hash: The 'fragment' portion of the URL including the pound-sign.

Example: '#hash'

 

我們將使用依賴註入的方式較松散地添加路由模塊。作為路由目標的函數稱為請求處理程序,請求處理函數的實現需要創建一個叫做requestHandlers的模塊,當然也可以命名為其他。並對於每一個請求處理程序,添加一個占位用函數,隨後將這些函數作為模塊的方法導出,這樣就可以將請求處理程序和路由模塊連接起來,讓路由有路可循。

 

特別的是,將一系列請求處理程序通過一個對象來傳遞,並且需要使用松耦合的方式將這個對象註入到route()函數中。

 

我們可以用從關聯數組中獲取元素一樣的方式從傳遞的對象中獲取請求處理函數,因此就有瞭簡潔流暢的形如handle[pathname]();的表達式。

 

var handle = {}

handle["/"] = requestHandlers.start;

handle["/start"] = requestHandlers.start;

handle["/upload"] = requestHandlers.upload;

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *