这里就来实现一下怎么通过koa-router是怎么对路由进行模块化配置的
实现以routes文件下的js进行路由的配置
目录结构 需安装koa,koa-router
——minEgg
——routes
——index.js
——user.js
——app.js // 启动文件
——loader.js // 加载器
先定义routes中路由的配置 例如访问 / 时出现的是首页,/user/时是出现用户首页
// index.js
module.exports = {
'get /': async ctx => {
ctx.body = '首页'
},
'get /detail': async ctx => {
ctx.body = '详情页'
},
}
// user.js
module.exports = {
// /user/
'get /': async ctx => {
ctx.body = '用户首页'
},
'get /info': async ctx => {
ctx.body = '用户详情'
}
}
然后实现关键的加载器,加载器主要作用就是读取routes下的文件以及导出的内容,在添加配合koa-router实现路由
// 读取文件夹下的模块
const fs = require('fs');
const path = require('path');
const Router = require('koa-router');
function load(dir, cb) {
// 读取文件
const url = path.resolve(__dirname, dir);
const files = fs.readdirSync(url)
files.forEach(filename => {
// 加载模块
filename = filename.replace('.js', '');
const file = require(url + '/' + filename);
// 执行回调方法
cb(filename, file);
})
}
//加载路由
function initRouter() {
// 实力化router
const router = new Router();
load('routes', (filename, routes)=>{
const prefix = filename === 'index' ? '' : `/${filename}`;
Object.keys(routes).forEach(key => {
// 由于配置文件中是 以'get /'这钟字符串进行配置的 所以需要进行处理
const [method, path] = key.split(' ');
//koa-router中的使用方法是: router[请求接口的方法类型](访问路径,访问时执行的回调函数)
router[method](prefix + path, routes[key])
})
})
return router
}
module.exports = { initRouter }
在app.js中引入loader.js并启动
const koa = require('koa');
const app = new koa();
const { initRouter } = require('./loader');
app.use(initRouter().routes());
app.listen(3000);
以上就是实现通过模块化的方式进行路由的配置啦