KoaJS URL生成

  • 定义和使用

    我们现在可以定义路由,它们要么是静态的,要么是固定的。要使用动态路由,需要提供不同类型的路由。使用动态路由可以让我们基于这些路径传递参数和过程。下面是动态路由的示例。
    var koa = require('koa');
    var router = require('koa-router'); 
    var app = new koa();
    
    var _router = router();   //实例化路由器
    _router.get('/:id', async (ctx)=>{   //定义路由
        ctx.body = '您指定的id是' + ctx.params.id;
    });
    
    app.use(_router.routes());  //使用路由器定义的路由
    
    app.listen(3001);
    
    要测试此项,请转到http://localhost:3001/55。您将得到以下响应。
    router
    您可以用其他任何内容替换URL中的 "55",它将反映在响应中。下面是一个复杂的例子。
    var koa = require('koa');
    var router = require('koa-router'); 
    var app = new koa();
    
    var _router = router();   //实例化路由器
    _router.get('/things/:name/:id', async (ctx)=>{   //定义路由
        ctx.body = 'id: ' + ctx.params.id + ' 和 name: ' + ctx.params.name;
    });
    
    app.use(_router.routes());  //使用路由器定义的路由
    
    app.listen(3001);
    
    要测试此项,请转到 http://localhost:3001/things/koa/55。
    router
    你可以使用 ctx.params 对象访问 URL 中传递的所有参数。
    请注意,以上两个路径不同。它们永远不会重叠。另外,如果您想在得到 '/things' 时执行代码,则需要单独定义它。
  • 模式匹配路由

    还可以使用 regex 限制 URL 参数匹配。假设您需要 id 是五位数长的数字。可以使用以下路由定义。
    var koa = require('koa');
    var router = require('koa-router'); 
    var app = new koa();
    
    var _router = router();   //实例化路由器
    _router.get('/things/:id([0-9]{5})', async (ctx)=>{   //定义路由
        ctx.body='id: ' + ctx.params.id
    });
    
    app.use(_router.routes());  //使用路由器定义的路由
    
    app.listen(3001);
    
    请注意,这只匹配具有 5 位数长 id 的请求。您可以使用更复杂的正则表达式来匹配/验证路由。如果没有一条路由与请求匹配,则会收到一条 notfound 消息作为响应。
    例如,如果我们定义与上述相同的路由,那么在使用有效 URL 请求时,我们得到-
    router