zoukankan      html  css  js  c++  java
  • eggjs服务(service)和控制器(controller)相互调用规则

    MVC框架:

      view                          视图 模板 页面的展示
      controller控制器               负责处理一些业务逻辑的处理  (简单业务逻辑处理)
      model 模型(service)          和数据打交道(查询数据库、操作数据库数据   请求数据)
                      (复杂的业务逻辑  以及数据操作)

    egg.Controller,会有下面几个属性挂在 this 上

      this.ctx: 当前请求的上下文 Context 对象的实例,通过它我们可以拿到框架封装好的处理当前请求的各种便捷属性和方法。
      this.app: 当前应用 Application 对象的实例,通过它我们可以拿到框架提供的全局对象和方法。
      this.service:应用定义的 Service,通过它我们可以访问到抽象出的业务层,等价于 this.ctx.service 。
      this.config:应用运行时的配置项。
      this.logger:logger 对象,上面有四个方法(debug,info,warn,error),
             分别代表打印四个不同级别的日志,使用方法和效果与 context logger 中介绍的一样,
             但是通过这个 logger 对象记录的日志,在日志前面会加上打印该日志的文件路径,以便快速定位日志打印位置。

    服务的命名规则

      Service 文件必须放在 app/service 目录,可以支持多级目录,访问的时候可以通过目录名级联访问。
      app/service/biz/user.js => ctx.service.biz.user    (建议)****
      app/service/sync_user.js => ctx.service.syncUser
      app/service/HackerNews.js => ctx.service.hackerNews
      

    demo:
    home控制器
    'use strict';
    
    const Controller = require('egg').Controller;
    
    class HomeController extends Controller {
      async index() {
    
         //调用服务里面的方法     注意异步:await
    
          // console.log(this.config.api);
    
          var list=await this.service.news.getNewsList();
          
          var user=await this.service.user.getUserInfo();
    
    
          var syncUser=await this.service.syncUser.echo();
    
          await this.ctx.render('home',{
              list:list,
              user:user
          });
    
      }
    
    }
    
    module.exports = HomeController;

    new.js服务

    'use strict';
    
    const Service = require('egg').Service;
    
    class NewsService extends Service {
      async getNewsList() {
        
    
            //获取config的数据
    
            console.log(this.config.api);
            //注意获取新闻数据
            var list=['11111','2222','333333333'];
    
    
            //调用user服务的数据
    
            var user =await this.service.user.getUserInfo();
    
            console.log(user);
    
    
            return list;
    
      }
      
    }
    
    module.exports = NewsService;

    user服务

    'use strict';
    
    const Service = require('egg').Service;
    
    class UserService extends Service {
      async getUserInfo() {
     
        return {
                name:'张三',
                age:20
        }
      }
    }
    module.exports = UserService;

    home.html view层

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        
    
        <h2>姓名:<%=user.name%>  年龄:<%=user.age%></h2>
            <ul>
                    <%for(var i=0;i<list.length;i++){%>
                    <li><%=list[i]%></li>
            
                    <%}%>
                </ul>
    </body>
    </html>
  • 相关阅读:
    企业库应用实践系列五:创建模板引擎Library
    关于HtmlHelper:是MVC自作聪明,还是我不够明白?
    企业库应用实践系列二:对象创建原理详解
    企业库应用实践系列三:自定义构造函数
    专业导论 计算机科学概论
    企业短期项目,缺人手
    光脚丫学LINQ(040):引发未将对象引用设置到对象的实例的异常
    光脚丫学LINQ(045):如何表示计算所得列(LINQ to SQL)
    光脚丫学LINQ(042):如何将列表示为由数据库生成的列
    光脚丫学LINQ(043):为实体类的列成员指定在数据库中的数据类型
  • 原文地址:https://www.cnblogs.com/loaderman/p/11539813.html
Copyright © 2011-2022 走看看