Koa-捕获所有以前缀开头的路由

问题描述

我想知道如何使用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)