亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

koa-router路由參數(shù)和前端路由的結(jié)合詳解

 更新時(shí)間:2019年05月19日 11:35:59   作者:劉哇勇  
這篇文章主要給大家介紹了關(guān)于koa-router路由參數(shù)和前端路由的結(jié)合的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用koa-router具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

koa-router 定制路由時(shí)支持通過(guò)冒號(hào)形式在 url 中指定參數(shù),該參數(shù)會(huì)掛載到 context 上然后可通過(guò) 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");

啟動(dòng)服務(wù)后可看到頁(yè)面中展示出了從 url 中獲取到的 id 參數(shù)。

路由參數(shù)的獲取展示

現(xiàn)在來(lái)考慮另一種情況,即路由中支持前端路由的情況。

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

為了實(shí)現(xiàn)這樣的前端路由部分,服務(wù)端路由的配置需要借助正則來(lái)進(jìn)行,

- 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 由單個(gè)字符串變成了數(shù)組形式,第一個(gè)還是原來(lái)的路由,這樣正常的通過(guò) /user/1 形式過(guò)來(lái)的頁(yè)面能命中該路由。同時(shí)添加 /\/user\/([\w|\d]+)\/.*/ 部分,因?yàn)檎齽t情況下不再支持路由中通過(guò)冒號(hào)進(jìn)行參數(shù)的配置,所以這里 /user/ 后跟隨的 id 也需要使用正則來(lái)替換掉。

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

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

- 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}`;
});

最后完整的代碼會(huì)是這樣:

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");

此時(shí)訪問(wèn)以下連接進(jìn)行測(cè)試,

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

均能正確命中頁(yè)面并成功獲取到路由中的參數(shù)。

正則路由及路由參數(shù)的獲取

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 淺談Koa服務(wù)限流方法實(shí)踐

    淺談Koa服務(wù)限流方法實(shí)踐

    本篇文章主要介紹了淺談Koa服務(wù)限流方法實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 解決npm?i?報(bào)錯(cuò)以及python安裝卡住的問(wèn)題

    解決npm?i?報(bào)錯(cuò)以及python安裝卡住的問(wèn)題

    這篇文章主要介紹了解決npm?i?報(bào)錯(cuò)以及python安裝卡住的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Ubuntu安裝Node.js的2種方式

    Ubuntu安裝Node.js的2種方式

    這篇文章主要給大家介紹了關(guān)于Ubuntu安裝Node.js的2種方式,在Ubuntu系統(tǒng)上安裝Node.js和npm非常簡(jiǎn)單,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • node.js中的fs.chmod方法使用說(shuō)明

    node.js中的fs.chmod方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.chmod方法使用說(shuō)明,本文介紹了fs.chmod方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js 數(shù)據(jù)加密傳輸淺析

    Node.js 數(shù)據(jù)加密傳輸淺析

    這篇文章主要給大家介紹的是Node.js數(shù)據(jù)加密傳輸,本文主要介紹的是明文傳輸,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)于大家的理解和學(xué)習(xí)會(huì)很有幫助,有需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • Node.JS更改Windows注冊(cè)表Regedit的方法小結(jié)

    Node.JS更改Windows注冊(cè)表Regedit的方法小結(jié)

    注冊(cè)表是windows操作系統(tǒng)中的一個(gè)核心數(shù)據(jù)庫(kù),這里介紹一些通過(guò)node.js操作注冊(cè)表的幾種方法,感興趣的朋友參考下吧
    2017-08-08
  • 詳解nodejs中express搭建權(quán)限管理系統(tǒng)

    詳解nodejs中express搭建權(quán)限管理系統(tǒng)

    本篇文章主要介紹了詳解express搭建權(quán)限管理系統(tǒng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • npm安裝時(shí)的錯(cuò)誤排查的方法

    npm安裝時(shí)的錯(cuò)誤排查的方法

    在我們的日常工作中,使用npm來(lái)安裝依賴是非常常見的,然而,有時(shí)候安裝過(guò)程中會(huì)遇到各種各樣的報(bào)錯(cuò),本文主要介紹了npm安裝時(shí)的錯(cuò)誤排查的方法,感興趣的可以了解一下
    2024-08-08
  • npm安裝淘寶鏡像報(bào)錯(cuò)問(wèn)題解決(npm install -g cnpm)

    npm安裝淘寶鏡像報(bào)錯(cuò)問(wèn)題解決(npm install -g cnpm)

    本文主要介紹了npm安裝淘寶鏡像報(bào)錯(cuò)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Node.js中多進(jìn)程模塊Cluster的介紹與使用

    Node.js中多進(jìn)程模塊Cluster的介紹與使用

    眾所周知Node.js是單線程的,一個(gè)單獨(dú)的Node.js進(jìn)程無(wú)法充分利用多核。Node.js從v0.6.0開始,新增cluster模塊,讓Node.js開發(fā)Web服務(wù)時(shí),很方便的做到充分利用多核機(jī)器。這篇文章主要給大家介紹了關(guān)于Node.js中多進(jìn)程模塊Cluster的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論