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

AI 概述
官方对 Service 服务的说明 本文主要学习一下 Egg 中的 Service。Service 用来编写和数据库直接交互的业务逻辑代码。 官方对 Service 服务的说明 Service 就是在复杂业务场景下用于做业务逻辑封装的一个抽象层。 简单来说,就是把业务逻辑代码进一步细化和分类,所以和数据库交互的代码都放到 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 提供的数据。

以上关于07.Egg.js教程-Service服务的编写的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

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

微信微信 支付宝支付宝

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

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 07.Egg.js教程-Service服务的编写

发表回复