前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Egg 中Service定义与调用规则

Egg 中Service定义与调用规则

作者头像
越陌度阡
发布2020-11-26 12:35:48
1.2K0
发布2020-11-26 12:35:48
举报

Egg是一个标准的MVC框架,其中service就代表model层,专门用于和数据打交道,本篇将讲解如何在egg中定义service并在controller中调用,以及service的一些相关规则。

1. 使用方法

首先在service文件夹下定义服务文件news.js,并在文件中添加方法getNewsList。

代码语言:javascript
复制
'use strict';
const Service = require('egg').Service;
class NewsService extends Service {
    async getNewsList() {
        // 获取新闻数据,此处为模拟数据,实际项目应从数据库获取数据
        var list = ['新闻一', '新闻二', '新闻三'];
        return list;
    }
}
module.exports = NewsService;

然后在控制器中就可以使用定义的服务了。

代码语言:javascript
复制
'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
    async index() {
        var msg = '今日要闻';
        // 通过调用服务从数据库获取数据
        // service对应文件夹,news对应文件,getNewsList对应方法
        var list = await this.service.news.getNewsList();
        // 渲染news模板引擎,传入msg与list数据
        await this.ctx.render('news', {
            msg: msg,
            list: list
        });
    }
}
module.exports = NewsController;

2. 服务的调用规则及可调用方法

服务既可以被控制器调用也可以被服务调用,控制器既不可以被控制器调用也不可以被服务调用。

服务继承于Service,为了方便 ,egg 在 this上面绑定了以下方法,可以在服务中调用。

1. this.ctx:当前请求的上下文 Context 对象的实例,通过它我们可以拿到框架封装好的处理当前请求的各种便捷属性和方法。

2. this.app:当前应用 Application 对象的实例,通过它我们可以拿到框架提供的全局对象和方法。

3. this.service:应用定义的 Service,通过它我们可以访问到其他业务层,等价于 this.ctx.service。

4. this.config:应用运行时的配置项。

5. this.logger:logger 对象,上面有四个方法(debug,info,warn,error),分别代表打印四个不同级别的日志,通过这个 logger 对象记录的日志,在日志前面会加上打印该日志的文件路径,以便快速定位日志打印位置。

下面是调用实例:

代码语言:javascript
复制
'use strict';
const Service = require('egg').Service;
class NewsService extends Service {
    async getNewsList() {
        // 获取新闻数据,此处为模拟数据,实际项目应从数据库获取数据
        var list = ['新闻一', '新闻二', '新闻三'];
        // 获取config配置数据
        var api = this.config.api;
        // 获取其它服务的数据
        var user = await this.service.user.getUserInfo();
        
        var obj = {
            api: api,
            list: list,
            user: user
        }
        return obj;
    }
}
module.exports = NewsService;

3.服务的命名

Service 文件必须放在 app/service 目录,可以支持多级目录,访问的时候可以通过目录名级联访问。

由于文件命名的方式不同,调用服务时需要遵循以下规则:

1. 小写与小驼峰直接调用,推荐使用。

app/service/biz/user.js => ctx.service.biz.user

2. 下划线转小驼峰。

app/service/sync_user.js => ctx.service.syncUser

3.大驼峰转小驼峰。

app/service/SyncUser.js => ctx.service.syncUser

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 使用方法
  • 2. 服务的调用规则及可调用方法
  • 3.服务的命名
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档