通常來(lái)說(shuō)對(duì)于不同的URL請(qǐng)求,服務(wù)器應(yīng)該有不同的反應(yīng)。我們要為路由提供請(qǐng)求的URL和其他需要的GET及POST參數(shù),隨后路由需要根據(jù)這些數(shù)據(jù)來(lái)執(zhí)行相應(yīng)的代碼。我們需要的所有數(shù)據(jù)都會(huì)包含在request對(duì)象中,該對(duì)象作為onRequest()回調(diào)函數(shù)的第一個(gè)參數(shù)傳遞。為了解析這些數(shù)據(jù),需要調(diào)用額外的模塊,分別是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
'http://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: 'http://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'
我們將使用依賴(lài)注入的方式較松散地添加路由模塊。作為路由目標(biāo)的函數(shù)稱(chēng)為請(qǐng)求處理程序,請(qǐng)求處理函數(shù)的實(shí)現(xiàn)需要?jiǎng)?chuàng)建一個(gè)叫做requestHandlers的模塊,當(dāng)然也可以命名為其他。并對(duì)于每一個(gè)請(qǐng)求處理程序,添加一個(gè)占位用函數(shù),隨后將這些函數(shù)作為模塊的方法導(dǎo)出,這樣就可以將請(qǐng)求處理程序和路由模塊連接起來(lái),讓路由有路可循。
特別指出的是,這里需要將一系列請(qǐng)求處理程序通過(guò)一個(gè)對(duì)象來(lái)傳遞,并且需要使用松耦合的方式將這個(gè)對(duì)象注入到route()函數(shù)中。
我們可以用從關(guān)聯(lián)數(shù)組中獲取元素一樣的方式從傳遞的對(duì)象中獲取請(qǐng)求處理函數(shù),因此就有了簡(jiǎn)潔流暢的形如handle[pathname]();的表達(dá)式。代碼如下所示:
var handle = {}handle["/"] = requestHandlers.start;handle["/start"] = requestHandlers.start;handle["/upload"] = requestHandlers.upload;新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注