requireDirectory实现路由自动加载
原创weixin_43756060 发布于2019-08-14 14:37:51 阅读数 265 收藏
- 执行npm i require-directory --save安装插件
- 参考文档
- 在app.js中引用并使用它
const Koa = require('koa')
const requireDirectory = require('require-directory')
const Router = require('koa-router')
const app = new Koa()
// 参数:第一个参数固定参数module,第二个参数要加载的模块的文件路径,第三个参数:每次加载一个参数执行的函数
const modules = requireDirectory(module, './api', {visit:whenModuleLoad})
function whenModuleLoad (obj) {
if(obj instanceof Router){
app.use(obj.routes())
}
}
app.listen(3000)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 因为app.js是入口文件,所以我们为了以后的便于维护,我们需要把其中的逻辑运算都单独提取出来
- 在根目录下创建app文件夹,将api文件夹移到app文件夹下
- 在根目录创建core文件夹,并且在下面创建init.js文件,将app.js中的逻辑运算写到该文件中
init.js
const requireDirectory = require('require-directory')
const Router = require('koa-router')
class InitManger {
static InitCore (app){
InitManger.app = app
InitManger.InitLoadRouters()
}
static InitLoadRouters () {
// 参数:第一个参数固定参数module,第二个参数要加载的模块的文件路径,第三个参数:每次加载一个参数执行的函数
// 在node.js中process.cwd()方法可以获取项目的根路径
const Url = `${process.cwd()}/app/api`
const modules = requireDirectory(module, Url, {visit:whenModuleLoad})
function whenModuleLoad (obj) {
if(obj instanceof Router){
InitManger.app.use(obj.routes())
}
}
}
}
module.exports = InitManger
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
在app.js中引入并执行它
const Koa = require('koa')
const InitManger = require('./core/init')
const app = new Koa()
InitManger.InitCore(app)
app.listen(3000)
- 1
- 2
- 3
- 4
- 5
- 6
- 7