egg --- 初始化一個egg項目基本結構說明

Egg.js體驗

  • 全局安裝
// 創建項目
$ npm i egg-init -g
$ egg-init egg-example --type=simple
$ cd egg-example
$ npm i// 啟動項目
$ npm run dev
$ open localhost:7000

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

Egg.js的結構

  • 路由(Router): 將請求URL和具體承擔執行動作的Controller的關系對應
  • 控制器(Controller):
    • Restful: 接收用戶的參數,從數據中查找內容返回給用戶
    • 頁面請求: 根據用戶訪問不同的URL,渲染不同的模板得到HTML返回給用戶
    • 代理服務器: 將用戶的請求轉發到其他服務器上.
  • 服務(Service):
    • Service就是將復雜業務場景下用于做業務封裝的一個抽象層
    • 好處:
      • 保持Controller簡潔
      • 業務邏輯獨立性: 用戶業務PCController + MobileController
      • 邏輯和展現分離:
        • 容易編寫測試用例
        • 無容器依賴對象 (body header)
  • 數據庫:
    • mongoose
    • sequelize

基本使用

  • 使用egg-init生成的結構如下
  • 自己添加一個Service層
    在這里插入圖片描述
  • 打開egg-example/app/router.js, 有如下代碼:
module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);
}
  • 在這一層,將路由請求/ 和處理函數 controller.home.index對應起來
  • controller.home.index其實是對應Controller層.
  • 找到Controller(文件夾)下面的文件home.js,打開如下:
    在這里插入圖片描述
  • 說明:
    1. 使用 const Controller = require('egg').Controller得到egg框架中的Controller基類
    2. 自定義類繼承與Controller基類 class HomeController extends Controller
    3. 在里面聲明了一個異步方法 async index(){...}
    4. 將自定義的類導出,module.exports = HomeController
  • 這里的index 對應路由層(Router)中的 controller.home.index

類似的加一個Service層

  • 假設是User的服務處
  1. 首先獲得Service的基類 const Service = require('egg').Service
  2. 自定義子類繼承基類const UserService extends Service{...}
  3. 在里面寫一個方法,用于獲取所有用戶
async getAll(){return [{name:'marron',age:18}]
}
  1. 導出自己定義的類
  • 目錄結構自己新建,代碼保存于’/egg-example/app/service/user.js’
const Service = require('egg').Service;class UserService extends Service{async getAll() {return [{ name:'marron', age: 18 }]}
}

在Controller層中使用Service層的服務

  • 1.首先從this中獲取上下文 const {ctx} = this
  • 2.Service層中(繼承基類Service)的方法全部掛載在ctx.service上
  • 調用如下:
'use strict';const Controller = require('egg').Controller;class HomeController extends Controller {async index() {const { ctx } = this;ctx.body = await ctx.service.user.getAll()}
}module.exports = HomeController;

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250468.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

葫蘆娃

葫蘆娃救爺爺 1.隊名——代碼那些事兒 2.團隊成員 劉佳 211606320(隊長)李佳 211660313周世元 211606348王浩 211606378曾麗麗 211606302陳水蓮 211606303許燕婷 211606338楊小妮 2116063413.隊長博客鏈接 -https://www.cnblogs.com/LJ-D/p/9799944.html…

webstorm遇到的問題

問題一:英譯:未指定node.js的解釋器。 解決方法:將webstorm配置支持node.js并自動補全 步驟: 先下載node.jsFile->Setting->輸入Node.js(選中點進去)->Node imterpreter(選擇node的安裝…

egg --- 配置連接mysql 創建模型 插入數據

在egg中使用egg-sequelize插件 sequelize是與數據庫操作相關的庫安裝: npm install --save egg-sequelize mysql2 在egg中配置sequelize 1.在 config/plugin.js中引入 egg-sequelize插件,代碼如下 sequelize: {enable: true,package: egg-sequelize }2.在config/config.def…

Flask 在 Debug 模式下初始化2次

請移步: http://blog.zengrong.net/post/2632.html https://stackoverflow.com/questions/9449101/how-to-stop-flask-from-initialising-twice-in-debug-mode/9476701#9476701 https://stackoverflow.com/questions/25504149/why-does-running-the-flask-dev-serve…

eclipse報錯: Could not generate secret

在調用微信接口時,出現一個錯誤: 一直以為是接口調用問題,經多方查詢和嘗試解決,最后找到根源: edit-->使用default就可以了。 原因: 在eclipse中運行時,把簽名信息給去掉了。 轉載于:https:…

koa --- [MVC實現之一]自定義路由讀取規則

實現MVC分層架構 目標是創建約定大于配置、開發效率高、可維護性強的項目架構路由處理 規范 所有路由,都要放在routes文件夾中若導出路由對象,使用 動詞空格路徑 作為key, 值是操作方法若導出函數, 則函數返回第二條約定格式的對象 路由定義: 新建 router/index.js, 默認index…

sql中的left join、right join、inner join

sql中的left join、right join、inner join 轉自:http://www.cnblogs.com/pcjim/articles/799302.html left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄inner join…

bzoj1128 Lam-lights

題目描述 對于一個長度為n的數列p,數列中任意兩個數互質。準備一個無限長的儲存器。然后從p1開始,把儲存器中p1倍數位置都賦值為p1,把儲存器中p2倍數位置都賦值為p2,把儲存器中p3倍數位置都賦值為p3。。。把儲存器中pn倍數位置都賦…

koa --- [MVC實現之二]Controller層的實現

[MVC實現之一]傳送門 https://blog.csdn.net/piano9425/article/details/103362966 Router層 router這一層,不做業務處理,僅僅只是將路由和路由的處理函數結合起來.路由的處理函數由Controller層實現改進目錄結構如下(實際上新建了controller文件夾及其內部子文件,mar.js) …

k8s install

https://xiangyu123.github.io/2018/10/17/k8s-install/轉載于:https://www.cnblogs.com/robinunix/p/9809937.html

Redis 幾種應用場景

Redis 幾種應用場景 字符串緩存 <?php$redis new Redis();$redis->connect(127.0.0.1,6379);$strKey test;$strKey1 test1;//set$arrCache [name>mysteryH,sex>男,age>22];$redis->set($strKey,json_encode($arrCache));$redis->expire($strKey,300…

HDU 6029(思維)

傳送門題面&#xff1a;Graph TheoryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1220 Accepted Submission(s): 553Problem DescriptionLittle Q loves playing with different kinds of graphs very muc…

2018.10.18多校

T1&#xff1a;雖說大家都被cdq限制住了思維&#xff0c;我一個注意到了排列有問題的還是涼了&#xff0c;這個我沒有一點辦法了。 鏈接&#xff1a;cdq T2&#xff1a;留坑&#xff0c;太毒了 T3&#xff1a;考場上就不覺得能寫&#xff0c;雖然心里想到一些做法&#xff0c;還…

Layui --- [Mar]給渲染后的表格加CSS樣式

為什么要控制樣式 使用layui生成后的表格的樣式有時候,并不能滿足我們的需求.因此在渲染完成后,需要自定義類對其操作 Layui表格渲染后一般會出現以下結構 分結構如下 我把使用layui的table渲染后的表格分為如下的幾個dom 1.$rawTable: 初始table,即 2.$renderTable: 渲染之…

Python 楊輝三角形的簡單實現

Python 楊輝三角形的簡單實現 介紹&#xff1a; 楊輝三角 實現&#xff1a; # -*- coding: utf-8 -*-def triangles():L[1]while True:yield LL [1] [ L[i-1] L[i] for i in range(1,len(L)) ] [1]n 0 for t in triangles():print(t)n n1if n 10 :break 效果&#x…

Jackson序列化和反序列化

1&#xff0c;下載Jackson工具包(jackson-core-2.2.3.jar jackson-annotations-2.2.3.jar jackson-databind-2.2.3.jar ) jackson-core-2.2.3.jar 核心包 http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.2.3/jackson-core-2.2.3.jarjackson-annot…

Python 框架之Flask初步了解

Python 框架之Flask初步了解 前言 ? 在了解python web 框架之前&#xff0c;我們需要先了解框架實現的基本原理。首先&#xff0c;需要了解WSGI&#xff08;Web Server Gateway Interface&#xff09;&#xff0c;借助WSGI我們就能實現用Python專注于生成HTML文檔&#xff0…

AJAX異步交互

什么是AJAX AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻譯成中文就是“異步Javascript和XML”。即使用Javascript語言與服務器進行異步交互&#xff0c;傳輸的數據為XML&#xff08;當然&#xff0c;傳輸的數據不只是XML&#xff09;。 AJAX還有一個最大的…

koa --- [MVC實現之三]換個角度重新開始-初始化

說明 下面文章是對該系列前面2篇及項目中經驗的總結,重新開始寫的實現了Mar類,貫穿Router層、Controller層、Service層基本骨架的搭建 初始 使用Koa創建一個簡單的服務器,一般會使用如下 const koa require(koa); const app new koa(); const Router require(koa-router…

MySQL索引設計原則

一、MySQL常用的索引類型 1.1主鍵索引 primary key 1.2唯一索引 unique 1.3普通索引 index 1.4全文索引 1.5組合索引 二、MySQL常用的數據結構 2.1B-tree 2.2哈希索引 三、索引的設計原則 3.1選擇唯一性索引 被設為唯一性的值可以設置為索引&#xff0c;這樣能快速定位到某條記…