Koa.js URL 构建

我们现在可以定义路由; 它们要么是静态的,要么是固定的。 要使用动态路由,我们需要提供不同类型的路由。 使用动态路由允许我们传递参数并基于它们进行处理。 以下是动态路由的示例。

var koa = require('koa');
var router = require('koa-router');
var app = new koa();

var _ = router();

_.get('/:id', sendID);

function sendID(ctx,next) {
   ctx.body = '指定的ID是: ' + ctx.params.id;
}

app.use(_.routes());
app.listen(3000);

要对此进行测试,可以访问 http://localhost:3000/369。 我们将得到以下响应。

koa 动态路由

我们可以将 URL 中的“369”替换为其他任何内容。 以下是一个稍微复杂示例。

var koa = require('koa');
var router = require('koa-router');
var app = new koa();

var _ = router();

_.get('/things/:name/:id', sendIdAndName);

function sendIdAndName(ctx,next){
   ctx.body = 'id: ' + ctx.params.id + ' and name: ' + ctx.params.name;
};

app.use(_.routes());

app.listen(3000);

访问 http://localhost:3000/things/jiyik/369 结果如下

koa 动态路由2

我们可以使用 ctx.params 对象来访问在 URL 中传递的所有参数。 请注意,以上两个具有不同的路径。 它们永远不会重叠。 此外,如果想在请求 “/things” 时执行代码,则需要单独定义它。


模式匹配路由

我们还可以使用正则表达式来限制 URL 参数匹配。 假设需要 id 为五位数字。 我们可以使用以下路由定义。

var koa = require('koa');
var router = require('koa-router');
var app = new koa();

var _ = router();

_.get('/things/:id([0-9]{5})', sendID);

function sendID(ctx,next){
   ctx.body = 'id: ' + ctx.params.id;
}

app.use(_.routes());
app.listen(3000);

请注意,这只会匹配具有 5 位长 id 的请求。 我们可以使用更复杂的正则表达式来匹配/验证自己的路由。 如果我们的路由都不匹配请求,那将收到 Not found 响应消息。

例如,如果我们定义与上面相同的路由,在使用有效 URL 进行请求时,我们会得到

koa 模式匹配路由

查看笔记

扫码一下
查看教程更方便