扫码一下
查看教程更方便
我们现在可以定义路由; 它们要么是静态的,要么是固定的。 要使用动态路由,我们需要提供不同类型的路由。 使用动态路由允许我们传递参数并基于它们进行处理。 以下是动态路由的示例。
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
。 我们将得到以下响应。
我们可以将 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
结果如下
我们可以使用 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 进行请求时,我们会得到