国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

koa-router路由參數和前端路由的結合詳解

2024-05-06 16:51:04
字體:
來源:轉載
供稿:網友

koa-router 定制路由時支持通過冒號形式在 url 中指定參數,該參數會掛載到 context 上然后可通過 context.params.paramName 方便地獲取。

考察下面的示例:

var Koa = require("koa");var Router = require("koa-router");var app = new Koa();var router = new Router();router.get("/user/:id", async function(ctx, next) { const userId = ctx.params.id; ctx.body = `user id is:${userId}`;});app.use(router.routes()).use(router.allowedMethods());app.listen(3000);console.log("server started at http:localhost:3000");

啟動服務后可看到頁面中展示出了從 url 中獲取到的 id 參數。

koa-router,路由參數,前端路由

路由參數的獲取展示

現在來考慮另一種情況,即路由中支持前端路由的情況。

即把現在的 url 由 /user/:id 的形式擴展成 /user/:id/foo/bar,這里 /foo/bar 部分可以是任何路由,作為前端處理的路由部分。

為了實現這樣的前端路由部分,服務端路由的配置需要借助正則來進行,

- router.get("/user/:id", async function(ctx, next) {+ router.get(["/user/:id", ///user//([/w|/d]+)//.*/], async function(ctx, next) { const userId = ctx.params.id; ctx.body = `user id is:${userId}`;});

這里將路由中 url 由單個字符串變成了數組形式,第一個還是原來的路由,這樣正常的通過 /user/1 形式過來的頁面能命中該路由。同時添加 ///user//([/w|/d]+)//.*/ 部分,因為正則情況下不再支持路由中通過冒號進行參數的配置,所以這里 /user/ 后跟隨的 id 也需要使用正則來替換掉。

但正則匹配下的路由就不能通過 context.params 來訪問 url 上的參數了。不過好在可通過在正則中定義匹配組(Capturing Groups)的形式來定義參數,即其中 ([/w|/d]+) 括號包裹的部分,稱為一個匹配組,一個匹配組是會自動被掛載到 context.params 上的,只是不像通過冒號定義的參數那樣會有一個名字,這種形式的參數按照匹配到的順序形成一個數組賦值到 context.params,所以訪問第一個匹配組形成的參數可通過 context.params[0] 來獲取。

于是上面的代碼稍加修正后,就能夠正確處理來自命名參數(通過冒號匹配)或正則參數形成的 query 參數了。

- router.get("/user/:id", async function(ctx, next) {+ router.get(["/user/:id", ///user//([/w|/d]+)//.*/], async function(ctx, next) {- const userId = ctx.params.id;+ const userId = ctx.params.id || ctx.params[0]; ctx.body = `user id is:${userId}`;});

最后完整的代碼會是這樣:

var Koa = require("koa");var Router = require("koa-router");var app = new Koa();var router = new Router();router.get(["/user/:id", ///user//([/w|/d]+)//.*/], async function(ctx, next) { const userId = ctx.params.id || ctx.params[0]; ctx.body = `user id is:${userId}`;});app.use(router.routes()).use(router.allowedMethods());app.listen(3000);console.log("server started at http:localhost:3000");

此時訪問以下連接進行測試,

  • http://localhost:3000/user/1
  • http://localhost:3000/user/2/foo
  • http://localhost:3000/user/3/foo/bar

均能正確命中頁面并成功獲取到路由中的參數。

koa-router,路由參數,前端路由

正則路由及路由參數的獲取

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 都安| 乳源| 城口县| 苗栗县| 淮北市| 蓬莱市| 天祝| 保亭| 长岛县| 南城县| 郎溪县| 江津市| 朝阳市| 海兴县| 清原| 星座| 交口县| 南郑县| 达拉特旗| 江达县| 冀州市| 盐池县| 铁岭市| 岗巴县| 曲周县| 灵璧县| 民丰县| 桓台县| 吉水县| 城固县| 佛学| 松溪县| 锡林郭勒盟| 渝北区| 山东省| 金阳县| 通化市| 出国| 克什克腾旗| 扎赉特旗| 黑龙江省|