Koa.js - URL 构建
我们现在可以定义路由;它们要么是静态的,要么是固定的。要使用动态路由,我们需要提供不同类型的路由。使用动态路由允许我们传递参数并根据它们进行处理。以下是动态路由的示例。
var koa = require('koa'); var router = require('koa-router'); var app = koa(); var _ = router(); _.get('/:id', sendID); function *sendID() { this.body = 'The id you specified is ' + this.params.id; } app.use(_.routes()); app.listen(3000);
要测试这一点,请转到 https://localhost:3000/123。您将获得以下响应。
您可以将 URL 中的"123"替换为其他任何内容,它将反映在响应中。以下是上述内容的一个复杂示例。
var koa = require('koa'); var router = require('koa-router'); var app = koa(); var _ = router(); _.get('/things/:name/:id', sendIdAndName); function *sendIdAndName(){ this.body = 'id: ' + this.params.id + ' and name: ' + this.params.name; }; app.use(_.routes()); app.listen(3000);
要测试这一点,请转到 https://localhost:3000/things/tutorialspoint/12345。
您可以使用 this.params 对象访问您在 URL 中传递的所有参数。请注意,以上两个具有不同的路径。它们永远不会重叠。此外,如果您想在获取"/things"时执行代码,则需要单独定义它。
模式匹配路由
您还可以使用正则表达式来限制 URL 参数匹配。假设您需要 id 为五位数字。您可以使用以下路由定义。
var koa = require('koa'); var router = require('koa-router'); var app = koa(); var _ = router(); _.get('/things/:id([0-9]{5})', sendID); function *sendID(){ this.body = 'id: ' + this.params.id; } app.use(_.routes()); app.listen(3000);
请注意,这将仅匹配具有 5 位长 id 的请求。您可以使用更复杂的正则表达式来匹配/验证您的路由。如果您的路由均不符合请求,您将收到一条"未找到"消息作为响应。
例如,如果我们定义与上述相同的路由,则在使用有效 URL 进行请求时,我们会得到 −