管理文件夹中所有路由器的单个路由器文件

时间:2018-05-25 10:44:01

标签: javascript node.js koa koa2

我创建了一个名为router的文件夹,有很多模块,例如,一个名为home.js的模块

  const router = require('koa-router')()
  router
  .get('/', async ( ctx )=>{})
  .get('/d', async ( ctx )=>{})
  module.exports = router

在索引文件app.js

  const Koa = require('koa')
  const app = new Koa()
  const router = new Router()
  const home = require('./router/home')
  router.use('/', home.routes())
  const help = require('./router/help')
  router.use('/help', help.routes())
  const ask = require('./router/ask')
  router.use('/ask', ask.routes())
  const user = require('./router/user')
  router.use('/user', user.routes())
  //more router.use
  app.use(router.routes()).use(router.allowedMethods())

我不希望app.js中的代码太多,所以我想将所有路由器需求移到一个文件中,例如controller.js,然后只移动app.js需要此文件controller.js,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您在一个目录下拥有所有路由器文件,则可以自动加载所有路由文件。你可以用这种方法做到这一点:

fs.readdirSync(__dirname + '/src/routes').forEach((routerFile) => {
    if (routerFile.substr(-3) === '.js') {
        let route = require('./dist/routes/' + routerFile);
        router.use(route.path, route.router.routes(), route.router.allowedMethods());
    }
});

如果路由器文件位于不同的目录下,并且您需要明确指定每个目录,则可以将路由器创建逻辑移动到单独的模块中。