Egg.js 教程

一、Egg 簡(jiǎn)介

Egg.js 為企業(yè)級(jí)框架和應(yīng)用而生,我們希望由 Egg.js 孕育出更多上層框架,幫助開(kāi)發(fā)團(tuán)隊(duì)和開(kāi)發(fā)人員降低開(kāi)發(fā)和維護(hù)成本。
(感謝阿里?。?/strong>
如何評(píng)價(jià)阿里開(kāi)源的企業(yè)級(jí) Node.js 框架 EggJS?

image.png
image.png
image.png

二、Egg 初體驗(yàn)

我們推薦直接使用腳手架,只需幾條簡(jiǎn)單指令,即可快速生成項(xiàng)目:

$ mkdir egg-example && cd egg-example
$ npm init egg --type=simple
$ npm i

啟動(dòng)項(xiàng)目:

$ npm run dev
$ open localhost:7001

如果下載失敗,從這里克隆項(xiàng)目到本地

三、Egg VS Express/Koa

3.1 從 Express 到 Koa

  • Koa 默認(rèn)選擇了async function 作為異步編程模型

  • Koa 的中間件和 Express 不同,Koa 選擇了洋蔥圈模型。所有的請(qǐng)求經(jīng)過(guò)一個(gè)中間件的時(shí)候都會(huì)執(zhí)行兩次,對(duì)比 Express 形式的中間件,Koa 的模型可以非常方便的實(shí)現(xiàn)后置處理邏輯


    image.png
  • 和 Express 只有 Request 和 Response 兩個(gè)對(duì)象不同,Koa 增加了一個(gè) Context 的對(duì)象,作為這次請(qǐng)求的上下文對(duì)象。我們可以將一次請(qǐng)求相關(guān)的上下文都掛載到這個(gè)對(duì)象上。相較于 request 和 response 而言更加符合語(yǔ)義。
    同時(shí) Context 上也掛載了 Request 和 Response 兩個(gè)對(duì)象。和 Express 類(lèi)似,這兩個(gè)對(duì)象都提供了大量的便捷方法輔助開(kāi)發(fā),例如:
    get request.query
    get request.hostname
    set response.body
    set response.status

3.2 從 Koa 到 Egg

Koa 是一個(gè)非常優(yōu)秀的框架,然而對(duì)于企業(yè)級(jí)應(yīng)用來(lái)說(shuō),它還比較基礎(chǔ)。而 Egg 選擇了 Koa 作為其基礎(chǔ)框架,在它的模型基礎(chǔ)上,進(jìn)一步對(duì)它進(jìn)行了一些增強(qiáng)。

3.3 項(xiàng)目實(shí)例對(duì)比

  • 安裝 Mysql
mysql -u root -p // 輸入安裝結(jié)束時(shí)設(shè)置的密碼,如111111
  • 建立數(shù)據(jù)表
create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use test;
create table todoList(
  id int auto_increment primary key, 
  title char(30) not null
);

四、Egg 優(yōu)勢(shì)

1. 設(shè)計(jì)原則

Egg 奉行『約定優(yōu)于配置』,按照一套統(tǒng)一的約定進(jìn)行應(yīng)用開(kāi)發(fā),團(tuán)隊(duì)內(nèi)部采用這種方式可以減少開(kāi)發(fā)人員的學(xué)習(xí)成本,開(kāi)發(fā)人員不再是『釘子』,可以流動(dòng)起來(lái)。沒(méi)有約定的團(tuán)隊(duì),溝通成本是非常高的,比如有人會(huì)按目錄分棧而其他人按目錄分功能,開(kāi)發(fā)者認(rèn)知不一致很容易犯錯(cuò)。但約定不等于擴(kuò)展性差,相反 Egg 有很高的擴(kuò)展性,可以按照?qǐng)F(tuán)隊(duì)的約定定制框架。使用 Loader 可以讓框架根據(jù)不同環(huán)境定義默認(rèn)配置,還可以覆蓋 Egg 的默認(rèn)約定。

2. 特性

3. 漸進(jìn)式開(kāi)發(fā)(參考)

eggjs/examples/progressive

4. 應(yīng)用、插件和框架

從上面的使用場(chǎng)景可以看到應(yīng)用、插件和框架三者之間的關(guān)系。

  • 我們?cè)趹?yīng)用中完成業(yè)務(wù),需要指定一個(gè)框架才能運(yùn)行起來(lái),當(dāng)需要某個(gè)特性場(chǎng)景的功能時(shí)可以配置插件(比如 MySQL)。

  • 插件只完成特定功能,當(dāng)兩個(gè)獨(dú)立的功能有互相依賴(lài)時(shí),還是分開(kāi)兩個(gè)插件,但需要配置依賴(lài)。

  • 框架是一個(gè)啟動(dòng)器(默認(rèn)就是 Egg),必須有它才能運(yùn)行起來(lái)??蚣苓€是一個(gè)封裝器,將插件的功能聚合起來(lái)統(tǒng)一提供,框架也可以配置插件。
    在框架的基礎(chǔ)上還可以擴(kuò)展出新的框架,也就是說(shuō)框架是可以無(wú)限級(jí)繼承的,有點(diǎn)像類(lèi)的繼承。

image.png

五、插件、框架開(kāi)發(fā)實(shí)戰(zhàn)(待定)

To be continue...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 框架是一種概念,是對(duì)常見(jiàn)功能的封裝,是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法,通過(guò)制...
    Sun晨淏閱讀 583評(píng)論 0 1
  • 原文鏈接https://eggjs.org/zh-cn/intro/quickstart.html Applica...
    龍哈哈_4b89閱讀 1,075評(píng)論 0 0
  • 1.簡(jiǎn)書(shū) koa是由Express原班人馬打造,致力于成為一個(gè)更小、更富有表現(xiàn)力、更健壯的Web框架。使用koa編...
    不去解釋閱讀 2,786評(píng)論 0 11
  • 從egg創(chuàng)建工程起,并沒(méi)有明確的入口文件,找了半天才大概明白,于是把過(guò)程寫(xiě)下來(lái)參考https://github.c...
    老鼠AI大米_Java全棧閱讀 3,862評(píng)論 0 3
  • egg簡(jiǎn)介 egg 為企業(yè)級(jí)框架和應(yīng)用而生Egg官網(wǎng) 開(kāi)發(fā)模式 漸進(jìn)式開(kāi)發(fā) 歷史 2011 年的就已經(jīng)開(kāi)始在生產(chǎn)環(huán)...
    Silver湫澲閱讀 3,547評(píng)論 1 6

友情鏈接更多精彩內(nèi)容