Koa.js 是否有 Express 风格的嵌套路由器?

Les*_*a K 5 javascript url-routing node.js express koa

是否存在提供 Express 样式嵌套路由器的库?像这样的东西:

var koa = require('koa');
var app = koa();
var Router = require('???');

var restApiRouter = Router();
restApiRouter.get('/', function*() {
  // respond to /api/
});
restApiRouter.get('/messages', function*() {
  // respond to /api/messages
});

var appRouter = new Router();
appRouter.get('/', function*() {
  // respond to /
});
// redirects all /api/* requests to restApiRouter
appRouter.use('/api', restApiRouter);

app.use(appRouter);
Run Code Online (Sandbox Code Playgroud)

如果没有,在其他文件中封装公共路径路由的最佳做法是什么?

Jon*_*las 5

以前的答案没有确切显示如何嵌套路由器。这是一个真实的示例,分为多个控制器文件。

首先,我们将一些 API 路由定义到一个controllers/api/foo.js文件中:

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

router.get('/', function* () {
    // Return a list of foos
});

router.get('/:id', function* () {
    // Return a specific foo
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

然后,在你的应用路由器上,你可以像下面这样将它嵌入到一个文件中controllers/index.js

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

// Create a new route
router.get('/', function* () {
    this.body = 'Home page';
});

// Nest previous API route
router.get('/api/foo', require('./api/foo').routes());

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

最后,只需在您的应用程序中使用路由器index.js

var koa = require('koa');
var app = koa();
app.use(require('./controllers').routes());
app.listen(process.env.PORT || 3000);
Run Code Online (Sandbox Code Playgroud)