Service用来编写和数据库直接交互的业务逻辑代码,就是在复杂业务场景下用于做业务逻辑封装的一个抽象层。
简单来说,Service就是把业务逻辑代码进一步细化和分类,所以和数据库交互的代码都放到Service中。这样作有三个明显的好处。建议只要是和数据库的交互操作,都写在Service里,用了Egg框架,就要遵守它的约定。
- 保持
Controller中的逻辑更加简介。 - 保持业务逻辑的独立性,抽象出来的
Service可以被多个Controller调用。 - 将逻辑和展现分离,更容易编写测试用例。
1. 简单编写一个Service
Egg规定Service文件必须放在/app/service目录,所以我们在/app文件夹下面,新建一个service文件夹。然后在新建一个home.js文件。
'use strict';
const Service = require('egg').Service;
class HomeService extends Service {
async getHome(res) {
// 后期在这里可进行数据库的相关操作
return {
id: res.id,
name: res.name,
age: '18',
};
}
}
module.exports = HomeService;
命名规则和写法跟Controller是非常类似的,同样Service里的方法也全部是异步方法,所以要使用async关键字。
2. 调用编写好的Service
/app/controller/home.js文件中的gettest2( )方法。
async gettest2() {
const { ctx } = this;
const res = await ctx.service.home.getHome(ctx.params);
ctx.body = res;
}
3. 配置路由
router.get('/gettest2/:id/:name', controller.home.gettest2);
4. 请求http://127.0.0.1:7001/gettest2/1/xiaohong
注:写好一个service方法,也可以在其它的Controller里进行使用。
学习日期:2021/12/23
视频参考:www.bilibili.com/video/BV1s3…
仅供个人学习和记录