91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用koa-router路由參數和前端路由的案例分析

發布時間:2021-07-27 09:39:17 來源:億速云 閱讀:149 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關使用koa-router路由參數和前端路由的案例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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路由參數和前端路由的案例分析

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

關于“使用koa-router路由參數和前端路由的案例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄龙县| 贵溪市| 拜泉县| 新民市| 大邑县| 甘孜| 民乐县| 华池县| 宜阳县| 全南县| 宣武区| 理塘县| 门源| 丰原市| 新建县| 安顺市| 大石桥市| 二连浩特市| 桃江县| 罗江县| 玉龙| 荃湾区| 建阳市| 乐陵市| 芜湖县| 湖北省| 景德镇市| 监利县| 浦城县| 佳木斯市| 金山区| 皮山县| 宜川县| 启东市| 苗栗县| 姚安县| 勃利县| 定结县| 句容市| 天门市| 泾阳县|