07.Egg.js教程-Service服务的编写

目录
文章目录隐藏
  1. 官方对 Service 服务的说明

本文主要学习一下 Egg 中的 Service。Service 用来编写和数据库直接交互的业务逻辑代码。

官方对 Service 服务的说明

Service 就是在复杂业务场景下用于做业务逻辑封装的一个抽象层。

简单来说,就是把业务逻辑代码进一步细化和分类,所以和数据库交互的代码都放到 Service 中。这样作有三个明显的好处。

  • 保持 Controller 中的逻辑更加简介。
  • 保持业务逻辑的独立性,抽象出来的 Service 可以被多个 Controller 调用。
  • 将逻辑和展现分离,更容易编写测试用例。

个人建议只要是和数据库的交互操作,都写在 Service 里,用了 Egg 框架,就要遵守它的约定。

创建编写第一个 Service 文件

Egg 规定 Service 文件必须放在/app/service目录,所以我们在/app文件夹下面,新建一个service文件夹。然后在新建一个mybj.js文件。

'use strict';

const Service = require('egg').Service;

class MybjService extends Service{
    async getGirl(id) {
        //因为没有真实连接数据库,所以模拟数据
        return {
            id:id,
            name:'小红',
            age:18
        }
    }
}

module.exports = MybjService;

从代码中可以看出,命名规则和写法跟Controller是非常类似的。如果你能对比记忆,学习会简单很多。同样 Service 里的方法也全部是异步方法,所以要使用async关键字。

Controller 调用 Service 获取数据

写完 Service 方法后,就可以在 Controller 中使用 Service 获取它提供的数据了。现在我们回到/app/controller/mybj.js文件中的getGirl()方法。

编写代码前,我们并不需要把service进行引入,因为 Egg 已经为我们作好了这一切。直接使用ctx上下文就可以进行使用了。

下面为 Controller 中的getGirl()方法改写。

async getGirl(){
    const {ctx} = this;
    const res = await ctx.service.mybj.getGirl('1818');
    ctx.body = res
}

写完后,用npm run dev命令,启动服务。然后打开浏览器,输入http://127.0.0.1:7001/getGirl 就可以看到页面会呈现出service给我们返回的数据。

Controller 调用 Service 获取数据

Service 方法的可调用性

当你写完一个service方法后,你可以在其它的 Controller 里进行使用。比如我们现在去home.js中进行使用。打开/app/controller/home.js文件下,新建一个testGetGirl()方法。

async testGetGirl(){
    const ctx = this.ctx;
    const id = ctx.query.id;
    const res = await ctx.service.mybj.getGirl(id);
    ctx.body=res;
}

写完上面的代码,到/app/router.js文件里,增加一个新的路由。

router.get('/testGetGirl', controller.home.testGetGirl);

写完后保存文件,然后在浏览器中输入 URL[http://127.0.0.1:7001/testGetGirl?id=2021]。可以看到,页面如愿以偿的获得了这些数据。

Service 方法的可调用性

总结

本文主要学习了 Egg.js 的 Service 的使用,Service 应该放在/app/servcie文件夹下面,命名的时候最好和Controller对应起来。写法和 Controller 类似,并且在任何 Controller 下都可以得到 Service 提供的数据。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 07.Egg.js教程-Service服务的编写

发表回复