在koa上,挂了个类似 egg 的 Service的 东西,很实用
发布于 8 年前 作者 weivea 4929 次浏览 来自 分享

简单来说,Service 就是在复杂业务场景下用于做业务逻辑封装的一个抽象层,提供这个抽象有以下几个好处:

保持 Controller 中的逻辑更加简洁。 保持业务逻辑的独立性,抽象出来的 Service 可以被多个 Controller 重复调用。 将逻辑和展现分离,更容易编写测试用例 以上内容摘抄自:https://eggjs.org/zh-cn/basics/service.html

koa-servise

koa-router 提供了control。
koa-servise 为control提供service,
用法类似 egg 的service,
就不用再把臃肿的代码写在 control里边了

service下的方法 可以通过this.ctx.servics.xxx 相互调用,
this.ctx即为每次请求的ctx

支持async/await方法

install

npm install koa-service --save

usage

具体使用参考 https://github.com/weivea/koa-service

#目录环境
./index.js
./service
./service/testa
./service/testa/testd.js
./service/testa.js
./service/testb.js
./service/testc
./service/testc/testc.js

./index.js


const path = require('path')
const Koa = require('koa')
const Router = require('koa-router')
const service = require('../lib/koaService')
const app = new Koa();
app.use(service({
 serviceRoot: path.join(__dirname, 'service')
}))
const router = new Router();
router.get('/', async function(ctx, next) {
 ctx.service.testb.bFun()
 const re = await ctx.service.testa.testd.b2Fun()
 // console.log(re);
 ctx.body = re
 await next()
});
app
 .use(router.routes())
 .use(router.allowedMethods());
app.listen(8081, () => {
 console.log('listen 8081')
})

写一个service文件 ./service/testb.js

class Servic {
 bFun() {
 console.log(__filename);
 return __filename;
 }
 async b2Fun() {
 const re = await this.ctx.service.testa.testd.b2Fun()
 console.log(__filename, 'log out:' , re)
 return await (() =>
 new Promise((resolve, reject) => {
 // 自运行返回Promise
 setTimeout(() => {
 resolve(`async ${__filename}`);
 }, 100);
 }))();
 }
}
module.exports = Servic;
回到顶部

AltStyle によって変換されたページ (->オリジナル) /