问题描述
我想知道如何使用KOA-Router捕获特定路由的所有API调用。 例如。我有一个像这样设计的api:
/api/
/api/user/
/api/user/create
/api/user/login
/api/user/delete
如何为以/api/
开头的所有呼叫触发路由/api/
?使用expressjs,您可以执行以下操作以获取所有从特定路径开始的调用:
app.get('/api/*',()=>{});
但是对于KOA,星号'*'不起作用,并且在KOA文档中找不到有用的东西。谢谢您的帮助!
解决方法
我在正则表达式github自述文件的路径中找到了答案。 Koa将其用于路径匹配。
https://github.com/pillarjs/path-to-regexp
他们有一个演示如何执行此操作的示例:
const regexp = pathToRegexp("/:foo/(.*)");
所以我只需要放入(.*)
而不是简单的*
这是一个快速的例子。确保从 / api 路由调用next()
,以将请求传递到中间件堆栈。
const Koa = require('koa')
const Router = require('@koa/router')
const app = new Koa()
const router = new Router()
router.get('/api(.*)',(ctx,next) => {
ctx.body = 'You hit the /api route'
next()
})
router.get('/api/user',(ctx) => {
ctx.body += '\nYou hit the /api/user route'
})
router.get('/api/user/create',(ctx) => {
ctx.body += '\nYou hit the /api/user/create route'
})
app.use(router.routes())
app.listen(3000)