手动加载路由
在koa2的爬虫后端项目中,我们会对路由模块就行拆分。然后在app.js
中进行导入和路由注册。
const crawlerRouter = require("./routes/crawler");
const indexRouter = require("./routes/index");
const adminRouter = require("./routes/admin");
//.....
app.use(crawlerRouter.routes(), crawlerRouter.allowedMethods());
app.use(indexRouter.routes(), indexRouter.allowedMethods());
app.use(adminRouter.routes(), adminRouter.allowedMethods());
这种是手动导入和手动进行注册的方式
require-directory
自动加载路由
自动的导入路由和统一的路由注册
路由模块统一放到routers文件夹下,我们需要导入routers文件夹下的所有
**模块**
思路就是一个个手动导入 -> routers里面的模块全部自动的一个个导入。
- 安装
npm install require-directory
- 导入
const Router = require('koa-router')
const requireDirectory = require('require-directory')
const requireDirectory = require('require-directory')
const allRouters = requireDirectory(module, './routers, {
visit: whenModuleLoad
})
function whenModuleLoad(obj) {
// 判断导出的是一个路由实例,才进行注册
if (obj instanceof Router) {
app.use(obj.routes())
}
}
requireDirectory:
第一个参数:module 表示导入的是模块
第二个参数:要导入哪个文件夹下的模块
第三个参数:每导入一个模块后要执行的回调函数(路由注册)
初始化管理器
我们可以把初始化的相关逻辑都放在core/init.js
文件中
const Router = require('koa-router')
const requireDirectory = require('require-directory')
class InitManager {
static initCore(app) {
InitManager.initRouters(app)
}
static initRouters(app) {
const routerDirectory = `${process.cwd()}/routers`
requireDirectory(module, routerDirectory, {
visit: whenModuleLoad
})
function whenModuleLoad(obj) {
if (obj instanceof Router) {
app.use(obj.routes())
}
}
}
}
module.exports = InitManager
process.cwd()
返回项目的根目录。
routerDirectory
的第二个参数,我们的目录层级有变化,需要使用绝对路径。来保证不管写在哪里,我们都是导入的routers文件下的所有目录。他的绝对路径不会发生变化
评论区