node.js路由控制
生活随笔
收集整理的這篇文章主要介紹了
node.js路由控制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? 一、工作原理
當通過瀏覽器訪問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/pcat的時候,服務器響應頭返回404 Not found錯誤 這是因為/pcat是一個不存在的路由規則,而且它也不是一個public目錄下的文件,所以響應404 假設我們創建一個/pcat的的路由規則。 app.get("/pcat",routes.pcat)。在index.js中增加函數pcat exports.pcat=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會被自動編譯成正則表達式,類似于\/user\/([^\/]+)\/?這樣的形式,路徑參數可以相應函數中通過req.params的屬性訪問 2.路徑規則同樣支持javascript正則表達式,例如: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協議中預留給能夠將連接改為管道方式的代理服務器。 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()函數,通過調用則將控制權交給后面的規則。總結
以上是生活随笔為你收集整理的node.js路由控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt字符编码认识
- 下一篇: sdut 数据结构实验之二叉树六:哈夫曼