node.js第十四課(路由控制)

來源:互聯網
上載者:User

  一、工作原理            當通過瀏覽器訪問app.js建立的伺服器時,會看到一個簡單的頁面,實際上它已經完成了許多透明的工作,            當訪問http://localhost:3000,瀏覽器會向伺服器發送請求,包括請求的方法、路徑、HTTP協議版本和要求標頭資訊。app會解析請求的路徑,調用相應的邏輯,app.js中有app.get("/",routes.index)通過res.render("index",{title:"pcat"})調用視圖模版index,傳遞title變數,最終檢視窗產生HTML頁面,返回給瀏覽器。            瀏覽器接收到內容後,通過分析需要擷取/stylesheets/style.css,因此會再次向伺服器發起請求,app.js並沒有一個路由規則指派到/stylessheets/style.css,但app通過app.use(express.static(__dirname+'/public'))配置了靜態檔案伺服器,因此會定向到app.js所在目錄下的/public/stylessheets/style.css拿去這個檔案。                         
            這是一個典型的MVC架構,瀏覽器發送請求,由路由控制接受,根據不同的路徑定向到不同的伺服器,控制器處理使用者具體的請求,可能會訪問資料庫中的對象,即模型部分,產生視圖的HTML,最後再由控制器返回給瀏覽器,完成一次請求。二、建立路由規則            當我們在瀏覽器訪問http://localhost:3000/octopus的時候,伺服器回應標頭返回HTTP 404錯誤            這是因為/octopus是一個不存在的路由規則,而且它也不是一個public目錄下的檔案,所以響應404            假設我們建立一個/octopus的路由規則。            app.get('/octopus',function(req,res){
                res.send('這是 octopus 的路徑');
            });      //若我們定義“/octopus的路由規則”兩次,則按照先定義的路由規則走。            app.get("/octopus",routes.octopus);    //在index.js中增加函數octopus            exports.octopus=function(req,res){                res.send('The time is '+new Date().toString());            }            伺服器在開始監聽之前,設定好了所有的路由規則,當請求到達時直接分配到相應函數。app.get是路由規則建立函數,            參數一:請求的路徑            參數二:是一個回呼函數,該路由規則被觸發時調用回呼函數,並傳遞req(請求資訊)和res(響應資訊)兩個參數。三、路徑匹配        上面講到了為固定的路徑設定路由規則,Express還提供更進階的路徑匹配模式。        1.app.get('/user/:username',function(req,res){            res.send("user :"+req.params.username);        });            路徑規則/user/:username會被自動編譯成Regex,類似於\/user\/([^\/]+)\/?這樣的形式,路徑參數可以相應函數中通過req.params的屬性訪問        2.路徑規則同樣支援javascriptRegex,例如:app.get(\/user\/([^\/]+)\/?,callback),這樣的好處在於可以定義更加複雜的路徑規則,不同支援是配置的參數是匿名的,因此需要通過req.params[0]這樣的形式訪問。四、REST風格的路由規則        Express支援REST風格的請求方式,REST意思是表徵狀態轉移,它是一種基於HTTP協議的網路應用的介面風格,充分利用HTTP的方法實現了統一風格的介面和服務,HTTP協議定義了一下8個標準方法:        GET:請求擷取指定的資源       擷取        POST:向指定資源提交資料       新增        DELETE:請求伺服器刪除指定資源     刪除        PUT:請求伺服器儲存一個資源              更新              HEAD:請求指定資源的回應標頭        TRACE:回顯伺服器數到的請求,主要使用者測試或診斷        CONNECT:HTTP/1.1協議中預留給能夠將串連改為管道方式的Proxy 伺服器。        OPTIONS:返回伺服器支援的HTTP要求方法           所謂安全指的是連續訪問多次所獲得的結果不受訪問者的影響。而等冪指的是重複請求多次與一次請求的效果是一樣的,比如擷取、更新和刪除操作是等冪,這與新增不同。            Express對每種HTTP要求方法都設計了不同的路由綁定函數,例如前面全部是app.get,標識該路徑綁定了GET請求,向這個路徑發起其他方式的請求不會被響應。        GET     app.get(path,callback)        POST     app.post(path,callback)        PUT     app.put(path,callback)        DELETE     app.delete(path,callback)        ...        ...        所有方法   app.all(path,callback,next)        怎麼使用?            綁定一個POST請求,可以使用app.post(path,callback)的方法設定路由規則。            app.all函數,它支援把所有的要求方法都綁定到同一個相應函數,是一個非常靈活的函數。五、控制權轉移        Express支援同一路徑綁定多個相應函數        app.all('/test/:user',function(req,res,next){                    //我們在這裡驗證使用者名稱是否存在。        //如果存在直接send或者調用next(new Error('使用者已經存在'));        //如果不存在我們調用next()把控制權交給下一個路由規則            console.log("all methods is call");            next();            res.send('哈哈');                    });          app.get('/test/:user',function(req,res){            res.send("user:"+req.pararms.user)        })        但是我們訪問都會只返回一次。            Exress提供了路由控制權轉移的方法,即next()函數,通過調用則將控制權交給後面的規則。                   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.