koa-router 路由引數與前端路由的結合
koa-router 定製路由時支援通過冒號形式在 url 中指定引數,該引數會掛載到 考察下面的示例: 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 引數。
路由引數的獲取展示 現在來考慮另一種情況,即路由中支援前端路由的情況。 即把現在的 url 由 為了實現這樣的前端路由部分,服務端路由的配置需要藉助正則來進行, - 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 由單個字串變成了陣列形式,第一個還是原來的路由,這樣正常的通過 但正則匹配下的路由就不能通過 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"); 此時訪問以下連線進行測試,
均能正確命中頁面併成功獲取到路由中的引數。
正則路由及路由引數的獲取 |