Express路由


Express利用HTTP動作提供了有意義並富有表現力的URL映射API,例如我們可能想讓用戶帳號的URL看起來像/user/12的樣子,下面的例子就能實現這樣的路由,其中與占位標識符(本例為:id)相關的值可以被req.params獲取到。

URL路徑和參數看起來沒有任何分別,真正的區別在於,將被哪個對象獲取,例如:下面例子和對應的URL:http://..../user/12,user將匹配路徑,12將匹配參數:id,它將被req.params對象獲取到。

app.get('/user/:id', function(req, res){
    res.send('user ' + req.params.id);
});

上例中當我們訪問/user/12時返回“user 12”。

注:app.get相當於在服務器注冊了一個監聽get請求事件的偵聽器,當請求的URL滿足第一個參數時,執行后面的回調函數,該過程是異步的。

路由是一個可以被內部編譯正則表達式的簡單字符串,比如當/user/:id被編譯后,被內部編譯后的正則表達式字符串看起來會是下面的樣子(簡化后):

\/user\/([^\/]+)\/?

要實現復雜點的,我們可以傳入正則表達式直接量,因為正則捕獲組是匿名的因此我們可以通過req.params進行訪問,第一個捕獲組應該是req.params[0],第二個應該是req.params[1],以此類推。

app.get(/^\/users?(?:\/(\d+)(?:\.\.(\d+))?)?/, function(req, res){
    res.send(req.params);
});

通過不同的url來測試我們定義的路由:

http://127.0.0.1:3000/users/any
[
  null,
  null
]
http://127.0.0.1:3000/users/12
[
  "12",
  null
]
http://127.0.0.1:3000/users/12..28
[
  "12",
  "28"
]
下面是一些路由例子,以及與之相匹配的關聯路徑:
"/user/:id"
/user/12

"/users/:id?"
/users/5
/users

"/files/*"
/files/jquery.js
/files/javascripts/jquery.js

"/file/*.*"
/files/jquery.js
/files/javascripts/jquery.js

"/user/:id/:operation?"
/user/1
/user/1/edit

"/products.:format"
/products.json
/products.xml

"/products.:format?"
/products.json
/products.xml
/products

"/user/:id.:format?"
/user/12
/user/12.json

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM