白話理解框架Egg-01主線劇情與加載器

Egg.js是什么

Egg.js 是阿里旗下產(chǎn)品基于Node.js 和Koa 是一個(gè)Nodejs 的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)框架??梢詭椭l(fā)團(tuán)隊(duì)和開(kāi)發(fā)人員降低開(kāi)發(fā)和維護(hù)成本。

Express 和Koa 是Node.js 社區(qū)廣泛使用的框架,簡(jiǎn)單且擴(kuò)展性強(qiáng),非常適合做個(gè)人項(xiàng)目。但框架本身缺少約定,標(biāo)準(zhǔn)的MVC 模型會(huì)有各種千奇百怪的寫(xiě)法。Egg 按照約定進(jìn)行開(kāi)發(fā),奉行『約定優(yōu)于配置』,團(tuán)隊(duì)協(xié)作成本低。

https://eggjs.org/zh-cn/

逐步搭建

為了能更清楚整個(gè)框架運(yùn)行原理,而不是以業(yè)務(wù)開(kāi)放為主,所以使用官網(wǎng)提供的 逐步搭建

目錄結(jié)構(gòu)為:


**egg-example**

├── app

│  ├── controller

│  │  └── home.js

│  └── router.js

├── config

│  └── config.default.js

└── package.json

按照教程做到 npm run dev ,結(jié)果竟然就報(bào)錯(cuò)了

報(bào)錯(cuò)內(nèi)容:


D:\www\egg-example2\node_modules\egg\lib\application.js:70

?      throw e;

?      ^

TypeError: Cannot read property 'index' of undefined

?    at module.exports.app (D:\www\egg-example2\app\router.js:6:35)

?    at AppWorkerLoader.loadFile (D:\www\egg-example2\node_modules\egg-core\lib\loader\egg_loader.js:305:13)

?    at AppWorkerLoader.loadRouter (D:\www\egg-example2\node_modules\egg-core\lib\loader\mixin\router.js:17:10)

一模一樣照著官網(wǎng)打都會(huì)這樣。。。

我嘗試在這里打印

image

發(fā)現(xiàn)app.controller 為空? 可是明明home.js 就好好在那里,為什么會(huì)說(shuō)沒(méi)有呢??

繼續(xù)看報(bào)錯(cuò)的文件, at module.exports.app (D:\www\egg-example2\app\router.js:6:35) 這里的router.js ,在對(duì)應(yīng)報(bào)警的位置前部打印看下:

image

這個(gè)時(shí)候,重新跑 npm run dev, 可以看到打印了 下面的信息

image

這里,我的理解是,每個(gè)框架應(yīng)該是有自己的主線劇情,在每個(gè)劇情點(diǎn),容許使用框架的人填充拓展,但是主線劇情應(yīng)該是不變的。

上面就是load文件的一個(gè)步驟。

好比框架設(shè)定為: 先load所有這樣那樣的文件,進(jìn)入內(nèi)存掛到app這個(gè)變量上, 然后才開(kāi)啟應(yīng)用。

這時(shí)候找到 加載器 的文檔,嗯呢,原來(lái)真的是這樣:

image

上面說(shuō)到加載了controller以后再會(huì)去加載router,可是從我之前打印信息中可以看出,程序加載了我自己寫(xiě)的 config ,然后到了router里面的時(shí)候home.js 的controller 卻沒(méi)有加載。

!! 說(shuō)明是加載controller的地方錯(cuò)了, 再仔細(xì)看下我的目錄:

image

額,原來(lái)是目錄的文件夾名字拼錯(cuò)了, 上面加載器文檔也說(shuō)的很清楚了, 必須放在 app/controller 文件夾下

好了,現(xiàn)在再看還報(bào)錯(cuò)嗎?

總結(jié):主線劇情與加載器

從理解框架的角度,慢慢去了解框架的大致流程,從而能快速定位出錯(cuò)的原因和位置。

最后編輯于
?著作權(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ù)。

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