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.syncUserapp/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>