[路飞]_初探koa-router模块化应用

250 阅读1分钟

这里就来实现一下怎么通过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);

以上就是实现通过模块化的方式进行路由的配置啦