koa router抽象实现业务代码解耦
2020-09-08 本文已影响0人
晴窗细语
之前做内部项目,后台用koa搭建,router处理那里是由各个细分路由组合起来,在每个路由的回调里处理业务代码,将数据返回给前台。这几天看koa的书,里面讲到在koa里运用MVC将各个模块抽出来,实现代码解耦,记录一下。
原代码结构
|-- src
|-- router/
|--index.js
|--test.js
|-- app.js
-
app.js中读取加载router文件夹下所有router
-
index.js 中导出所有router
-
test.js 中处理路由以及执行业务处理
test.js结构大致为:
const router = require('koa-router')();
router.get('/index', async(ctx, next) => {
//处理业务代码
});
router.post('/path', async(ctx, next) => {
//处理业务代码
});
module.exports = router
koa中实现MVC
思路就是将router中处理业务代码的地方抽出来放在单独的文件中,实现业务解耦。
代码结构:
|-- src
|-- controller/
|-- home.js
|-- router/
|--index.js
|-- app.js
其中,新增controller文件夹用,home.js用于处理业务逻辑,多个router js可对应多个controller js,这里只记录一个。
home.js大致结构为:
module.exports = {
index: async (ctx, next) => {
ctx.response.body = '....' //业务处理代码
},
// 从router js中抽象出来的各种业务代码
path: async (ctx, next) => {
},
……
}
router.js可相应作出修改:
const router = require('koa-router')();
cosnt HomeController = require('../controller/home');
module.exports = (app) => {
router.get('/index', HomeController.home);
router.post('/path', HomeController.path);
// 其他路由处理
……
}
相应代码可相应作出修改。