在之前的文章中我們介紹了一下基於 nodejs 開發的 koa2 框架,在之前還有 espress 框架,接下來我們再學習一個 Egg.js.
Egg.js 中文官網:https://eggjs.org/zh-cn/
Egg.js 是《阿里旗下產品》基於 Node.js 和 Koa 是一個 Nodejs 的企業級應用開發框架。 可以幫助發團隊和開發人員降低開發和維護成本。
Express 和 Koa 是 Node.js 社區廣泛使用的框架,簡單且擴展性強,非常適合做個人項 目。但框架本身缺少約定,標准的 MVC 模型會有各種千奇百怪的寫法。Egg 按照約定進行 開發,奉行『約定優於配置』,團隊協作成本低。
Egg.js 基於 Es6、Es7 以及 Typescript、Koa2 使得 Nodejs 具有更規范的開發模式、更低 的學習成本、更優雅的代碼、更少的開發成本、更少的維護成本。為企業級框架而生。
Egg.js 的特性:
1、提供基於 Egg 定制上層框架的能力
2、高度可擴展的插件機制
3、內置多進程管理
4、基於 Koa 開發,性能優異
5、框架穩定,測試覆蓋率高
6、漸進式開發
環境准備
操作系統:支持 macOS,Linux,Windows
運行環境:Nodejs 建議選擇 LTS 版本,Nodejs 最低要求 8.x。
快速初始化
我們推薦直接使用腳手架,只需幾條簡單指令,即可快速生成項目:
mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i
啟動項目:
npm run dev
然后打開 127.0.0.1:7001 即可:
我們按照上面的操作指令就會在我們本地快速創建一個 Egg 框架,目錄如下:
上圖就是我們快速搭建的一個 Egg 目錄,其中
app 目錄是我們開發項目的配置文件,控制器、服務等都在這個里面開發,
config 目錄是我們整個插件和項目的配置文件,
node_modules 目錄是我們所以依賴的 node 模塊的文件,test 目錄是一個測試目錄
.autod.conf.js 是 egg 調用的一個配置文件
.eslintignore.js 是代碼格式化忽略的配置文件
.eslintrc.js 是代碼格式化的配置文件
.gitignore 是 git 上傳忽略的文件
.travis.yml 和 appveyor.yml 也是相關配置文件,我們不需要管理
package.json 和 package-lick.json 是我們當前項目的一些配置依賴文件
README.md 是項目閱讀說明文件
Egg.js 為我們規定了我們的項目目錄及各個模塊需要防止的位置,如下:
app/router.js
用於配置 URL 路由規則,具體參見 Router。app/controller/**
用於解析用戶的輸入,處理后返回相應的結果,具體參見 Controller。app/service/**
用於編寫業務邏輯層,可選,建議使用,具體參見 Service。app/middleware/**
用於編寫中間件,可選,具體參見 Middleware。app/public/**
用於放置靜態資源,可選,具體參見內置插件 egg-static。app/extend/**
用於框架的擴展,可選,具體參見框架擴展。config/config.{env}.js
用於編寫配置文件,具體參見配置。config/plugin.js
用於配置需要加載的插件,具體參見插件。test/**
用於單元測試,具體參見單元測試。app.js
和agent.js
用於自定義啟動時的初始化工作,可選,具體參見啟動自定義。關於agent.js
的作用參見Agent機制。
由內置插件約定的目錄:
app/public/**
用於放置靜態資源,可選,具體參見內置插件 egg-static。app/schedule/**
用於定時任務,可選,具體參見定時任務。
若需自定義自己的目錄規范,參見 Loader API
app/view/**
用於放置模板文件,可選,由模板插件約定,具體參見模板渲染。app/model/**
用於放置領域模型,可選,由領域類相關插件約定,如 egg-sequelize。
Egg 內部運行機制如下:
接下來我們隊 Egg 內部的初始代碼進行一下分析:
我們在運行項目后再瀏覽器輸入 127.0.0.1:7001 后就可以訪問項目,那他是怎么運行的呢?
當我們訪問 127.0.0.1:7001/ 時,頁面通過 router.js 進行路由匹配,匹配到 "/",然后再通過 controller 去匹配 home.js 下的 index() 方法,然后通過 this.ctx.body 輸出 "hi, egg",頁面就呈現出 "hi egg"。這是我們只是做了簡單的分析,里面的有些語法,如 ctx.body 可以看之前說的 koa 相關文章。
項目啟動后我們就可以對項目進行完善了開發了,在這里就不過多說明了,本人自己做了一些 demo,包括 靜態資源處理,get,post 傳值,路由等,放在了個人的 gitee 上,有興趣的小伙伴可以參考一下。
好記性不如爛筆頭,特此記錄,與君共勉!