Egg.js是什么
Egg.js 是阿里旗下產(chǎn)品基于Node.js 和Koa 是一個(gè)Nodejs 的企業(yè)級(jí)應(yīng)用開發(fā)框架慎璧∈バ酰可以幫助發(fā)團(tuán)隊(duì)和開發(fā)人員降低開發(fā)和維護(hù)成本似炎。
Express 和Koa 是Node.js 社區(qū)廣泛使用的框架犬缨,簡(jiǎn)單且擴(kuò)展性強(qiáng)扯饶,非常適合做個(gè)人項(xiàng)目恒削。但框架本身缺少約定,標(biāo)準(zhǔn)的MVC 模型會(huì)有各種千奇百怪的寫法尾序。Egg 按照約定進(jìn)行開發(fā)钓丰,奉行『約定優(yōu)于配置』,團(tuán)隊(duì)協(xié)作成本低每币。
逐步搭建
為了能更清楚整個(gè)框架運(yùn)行原理斑粱,而不是以業(yè)務(wù)開放為主,所以使用官網(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ì)這樣则北。矿微。。
我嘗試在這里打印
發(fā)現(xiàn)app.controller 為空尚揣? 可是明明home.js 就好好在那里涌矢,為什么會(huì)說沒有呢?快骗?
繼續(xù)看報(bào)錯(cuò)的文件娜庇, at module.exports.app (D:\www\egg-example2\app\router.js:6:35) 這里的router.js ,在對(duì)應(yīng)報(bào)警的位置前部打印看下:
這個(gè)時(shí)候方篮,重新跑 npm run dev
, 可以看到打印了 下面的信息
這里名秀,我的理解是,每個(gè)框架應(yīng)該是有自己的主線劇情藕溅,在每個(gè)劇情點(diǎn)匕得,容許使用框架的人填充拓展,但是主線劇情應(yīng)該是不變的巾表。
上面就是load文件的一個(gè)步驟汁掠。
好比框架設(shè)定為: 先load所有這樣那樣的文件,進(jìn)入內(nèi)存掛到app這個(gè)變量上集币, 然后才開啟應(yīng)用考阱。
這時(shí)候找到 加載器 的文檔,嗯呢鞠苟,原來真的是這樣:
上面說到加載了controller以后再會(huì)去加載router乞榨,可是從我之前打印信息中可以看出,程序加載了我自己寫的 config 当娱,然后到了router里面的時(shí)候home.js 的controller 卻沒有加載吃既。
!趾访! 說明是加載controller的地方錯(cuò)了态秧, 再仔細(xì)看下我的目錄:
額董虱,原來是目錄的文件夾名字拼錯(cuò)了扼鞋, 上面加載器
文檔也說的很清楚了, 必須放在 app/controller 文件夾下
好了愤诱,現(xiàn)在再看還報(bào)錯(cuò)嗎云头?
總結(jié):主線劇情與加載器
從理解框架的角度,慢慢去了解框架的大致流程淫半,從而能快速定位出錯(cuò)的原因和位置溃槐。