最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs中實現(xiàn)路由功能

 更新時間:2014年12月29日 08:55:07   投稿:junjie  
這篇文章主要介紹了nodejs中實現(xiàn)路由功能,顧名思義,路由指的就是我們要針對不同的URL有不同的處理方式,本文將教你在node.js中實現(xiàn)路由功能,需要的朋友可以參考下

初學(xué)Node,發(fā)現(xiàn)了與自己之前的觀點完全不同的場面——你眼中的JavaScript,是干什么用的呢?特效?or 只是與客戶端的交互?可以說,JavaScript最早是運行在瀏覽器中的,然而你要這樣想,瀏覽器只是你提供了一個上下文(context),它定義了 使用JavaScript可以做什么,這里可以想成類似的一個企業(yè),企業(yè)定義了你可以在這里做什么,但是并沒有說太多關(guān)于JavaScript語言本身可 以做什么。事實上,作為一門完整的語言,JavaScript可以使用在不同的上下文中,體現(xiàn)出不同的能力。這里所講到的Nodejs其實說白了就是提供 的一個上下文,一個運行環(huán)境,它允許在后端(脫離瀏覽器環(huán)境)來運行JavaScript代碼。

路由選擇的核心是路由,顧名思義,路由指的就是我們要針對不同的URL有不同的處理方式,例如處理/start的業(yè)務(wù)邏輯和處理/upload模塊 的業(yè)務(wù);邏輯就是不一致的。在現(xiàn)實的實現(xiàn)下,路由過程會在路由模塊中“結(jié)束”,并且路由模塊并不是真正者針對請求“采取行動”的模塊,否則當(dāng)我們的應(yīng)用程 序變得更為復(fù)雜的時候就將無法得到很好的擴展。

這里我們首先創(chuàng)建一個叫做requestHandlers的模塊,對于每一個請求處理程序都添加一個占位函數(shù):


復(fù)制代碼 代碼如下:

function start(){  
    console.log("Request handler 'start' was called.");  
      
    function sleep(milliSeconds){  
        var startTime=new Date().getTime();  
        while(new Date().getTime()<startTime+milliSeconds);  
    }  
    sleep(10000);  
    return "Hello Start";  
}  
function upload(){  
    console.log("Request handler 'upload' was called.");  
    return "Hello Upload";  
}  
 
exports.start=start;  
exports.upload=upload;

這樣我們就可以將請求處理程序和路由模塊連接起來,讓路由“有路可循”。之后我們確定將一系列請求處理程序通過一個對象來傳遞,并且需要使用松耦合的方式將這個對象注入到router()函數(shù)中,主文件index.js:


復(fù)制代碼 代碼如下:

var server=require("./server");  
var router=require("./router");  
var requestHandlers=require("./requestHandlers");  
 
var handle={};  
handle["/"]=requestHandlers.start;  
handle["/start"]=requestHandlers.start;  
handle["/upload"]=requestHandlers.upload;  
 
server.start(router.route,handle);

如上所示,將不同的URL映射到相同的請求處理程序上是容易的:只要在對象中添加一個鍵為“/”的屬性,對應(yīng) requestHandlers.start即可。這樣我們就可以簡潔地配置/start和/的請求都交給start這一處理程序來處理。在完成看對象的 定義后,我們將它作為額外的參數(shù)傳遞給服務(wù)器,見server.js:

復(fù)制代碼 代碼如下:

var http=require("http");  
var url=require("url");  
 
function start(route,handle){  
    function onRequest(request,response){  
        var pathname=url.parse(request.url).pathname;  
        console.log("Request for "+pathname+" received.");  
          
        route(handle,pathname);  
          
        response.writeHead(200,{"Content-Type":"text/plain"});  
        var content=route(handle,pathname);  
        response.write(content);  
        response.end();  
    }  
    http.createServer(onRequest).listen(8888);  
    console.log("Server has started.");  
}   
exports.start=start;

這樣就在start()函數(shù)中添加了handle參數(shù),并且把handle對象作為第一個參數(shù)傳遞給了route()回調(diào)函數(shù),下面定義route.js:

復(fù)制代碼 代碼如下:

function route(handle,pathname){  
    console.log("About to route a request for "+ pathname);  
    if(typeof handle[pathname]==='function‘){  
        return handle[pathname]();  
    }else{  
        console.log("No request handler found for "+pathname);  
        return "404 Not Found";  
    }  
}  
exports.route=route;

通過以上代碼,我們首先檢查給定的路徑對應(yīng)的請求處理程序是否存在,如果存在則直接調(diào)用相應(yīng)的函數(shù)。我們可以用從關(guān)聯(lián)數(shù)組中獲取元素一樣的方式從 傳遞的對象中獲取請求處理函數(shù),即handle[pathname]();這樣的表達式,給人一種感覺就像是在說“嗨,請你來幫我處理這個路徑。”程序運 行效果如下圖:

 

相關(guān)文章

  • 解決淘寶cnpm 安裝后cnpm不是內(nèi)部或外部命令的問題

    解決淘寶cnpm 安裝后cnpm不是內(nèi)部或外部命令的問題

    今天小編就為大家分享一篇解決淘寶cnpm 安裝后cnpm不是內(nèi)部或外部命令的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js?Webpack常見的模式詳解

    Node.js?Webpack常見的模式詳解

    這篇文章主要介紹了Node.js?Webpack常見的模式,Webpack的另一個核心是Plugin?,Plugin是可以用于執(zhí)行更加廣泛的任務(wù)如打包優(yōu)化資源管理?環(huán)境變量注入等,需要的朋友可以參考下
    2022-10-10
  • Restify中接入Socket.io報Error:Can’t set headers的錯誤解決

    Restify中接入Socket.io報Error:Can’t set headers的錯誤解決

    這篇文章主要給大家介紹了在Restify中接入Socket.io報Error:Can’t set headers的錯誤解決方法,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 詳解node HTTP請求客戶端 - Request

    詳解node HTTP請求客戶端 - Request

    Request是一個Node.jsNPM模塊,它是一個HTTP客戶端,使用簡單功能確十分強大
    2017-05-05
  • 使用Node.js實現(xiàn)Clean?Architecture方法示例詳解

    使用Node.js實現(xiàn)Clean?Architecture方法示例詳解

    這篇文章主要為大家介紹了使用Node.js實現(xiàn)Clean?Architecture方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Node.js調(diào)試技術(shù)總結(jié)分享

    Node.js調(diào)試技術(shù)總結(jié)分享

    Node.js是一個可以快速構(gòu)建網(wǎng)絡(luò)服務(wù)及應(yīng)用的平臺。該平臺的構(gòu)建是基于Chrome's JavaScript runtime,也就是說,實際上它是對Google V8引擎(應(yīng)用于Google Chrome瀏覽器)進行了封裝。 今天介紹Node.js調(diào)式目前有幾種技術(shù),需要的朋友可以參考下。
    2017-03-03
  • Node如何實現(xiàn)在瀏覽器預(yù)覽項目的所有圖片詳解

    Node如何實現(xiàn)在瀏覽器預(yù)覽項目的所有圖片詳解

    最近項目遇到了個需求,需要將存放圖片進行預(yù)覽,所以這篇文章主要給大家介紹了關(guān)于Node如何實現(xiàn)在瀏覽器預(yù)覽項目的所有圖片的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 使用Node.js給圖片加水印的方法

    使用Node.js給圖片加水印的方法

    使用Node.js給圖片加水印,首先要確保本地安裝了node環(huán)境。然后,我們進行圖像編輯操作需要用到一個Node.js的庫:images。具體詳情大家可以通過本文了解下
    2016-11-11
  • npm?does?not?support?Node.js問題的解決辦法

    npm?does?not?support?Node.js問題的解決辦法

    這篇文章主要給大家介紹了關(guān)于npm?does?not?support?Node.js問題的解決辦法,文中通過代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Sequelize中用group by進行分組聚合查詢

    Sequelize中用group by進行分組聚合查詢

    大家都知道在SQL查詢中,分組查詢是較常用的一種查詢方式。分組查詢是指通過GROUP BY關(guān)鍵字,將查詢結(jié)果按照一個或多個字段進行分組,分組時字段值相同的會被分為一組。在Node.js基于Sequelize的ORM框架中,同樣支持分組查詢,使用非常簡單方便。下面來看看詳細的介紹。
    2016-12-12

最新評論

收藏| 玉树县| 商丘市| 织金县| 大化| 平乐县| 长岛县| 罗江县| 涟源市| 五指山市| 鄢陵县| 岑溪市| 贞丰县| 洛浦县| 江阴市| 龙山县| 大方县| 梅州市| 乌苏市| 陈巴尔虎旗| 罗定市| 白河县| 大兴区| 巴里| 武冈市| 大邑县| 上栗县| 静乐县| 山阳县| 睢宁县| 左贡县| 双桥区| 衡阳市| 台南市| 宜昌市| 响水县| 防城港市| 香河县| 伊宁县| 娱乐| 怀远县|