?
項目組織===項目組織:項目文件、目錄如何放置。??
##?引題前面幾節(jié)express小項目我們已經(jīng)學(xué)習(xí)了express基礎(chǔ)知識,?養(yǎng)著了基本到項目組織習(xí)慣,例如html放到views,靜態(tài)文件放到static。學(xué)習(xí)了路由,傳參數(shù),模板渲染,集成數(shù)據(jù)庫,debug日志。但隨著項目變復(fù)雜,發(fā)現(xiàn)一些缺點和不便:1)每次新項目都要重復(fù)安裝第三方依賴。?express??debug??body-parser??mongodb??ejs,每次安裝還需要想一想需要哪些庫,漏安裝。2)每個程序員對項目組織理解和起名習(xí)慣不一樣。??A程序員把html放到'views'文件夾下,靜態(tài)文件放到'static'。B程序員,'www'?,'public'。C等。3)邏輯越來越多,app.js可能兩三千行,難以維護(hù)。?可以nodejs模塊化export和require,但跟上條問題一樣,每個程序員但劃分標(biāo)準(zhǔn)不一樣。4)跟上一條類似,有些代碼??例如數(shù)據(jù)庫代碼(連接、異常、切換庫)非常重復(fù)。?想把重復(fù)但代碼抽離出來。5)運行不方便,需要cd、設(shè)置DEBUG環(huán)境變量。
這時我們想,有沒有一個架構(gòu)師把express相關(guān)常用的包整理好,項目組織整理好,搭建好項目框架,封裝好,供其它普通程序員使用。
##?腳手架腳手架:scaffold?,?基于核心內(nèi)容加上相關(guān)生態(tài),幫用戶做一些自動操作。express-generator:?express生成器,是express生態(tài)的腳手架項目,幫助我們更方便生成項目,適合中大型項目和公司協(xié)作開發(fā)。
安裝腳手架?`npm?install?express-generator?-g`????。注意--global全局安裝,安裝之后可以在終端生成express命令。完成`express?-h`?可以看到幫助信息即為成功。?可能的報錯:1)如果報錯沒有permission權(quán)限,打開管理員權(quán)限終端再運行。??windows點擊開始-cmd-右鍵以管理員權(quán)限打開。2)如果vscode里的終端不生效,到系統(tǒng)原生cmd?powershell中試試。3)安裝成功,終端無法調(diào)用。原因,win7用戶的早版本powershell有bug試試cmd。沒反應(yīng)的試試重啟終端。還不行的檢查上圖目錄下有沒有express.cmd和全局npm包路徑(c:\users\xxx\appData\roming\npm)是否在環(huán)境變量中。
1.?創(chuàng)建項目`cd?想創(chuàng)建項目文件夾的父目錄下``express?--view=ejs?[myapp]`2.?安裝依賴`cd?[myapp]``npm?install`???就會自動根據(jù)同級目錄下到package.json中依賴描述安裝所有包。3.?啟動項目普通運行:`npm?start`??????但仍然會很多日志,一般用這個就可以。debug級別日志:?cmd`set?DEBUG=myapp:*?;?npm?start`??簡寫?`set?DEBUG=*?;?npm?start`??ps`$env:DEBUG='*'?&?npm?start`
##?腳手架生成項目組織的理解1.?bin/www????項目'訪問入口'。這個文件實質(zhì)是js腳本。2.?public?????靜態(tài)文件目錄。因為css沒一個頁面都可以引用,所以'公共的'3.?router?????路由和視圖函數(shù)(項目邏輯)4.?views??????模板5.?app.js?????項目'代碼的入口'6.?package.json???依賴描述。內(nèi)置常用包,其它包如數(shù)據(jù)庫包仍需自己安裝。
###?細(xì)節(jié)理解1.?package.json?依賴?,除了之前學(xué)過的:-?cookie-parser?操作cookie??-?http-errors??返回封裝好的http錯誤響應(yīng)。https://www.npmjs.com/package/http-errors??-?morgan???http日志庫,debug日志庫負(fù)責(zé)跟express框架相關(guān),morgan跟http相關(guān)的日志。https://www.npmjs.com/package/morgan2.?運行程序之前運行?node?xxx.js。原理在package.json中script屬性里配置'npm?start'?等于?'node?./bin/www'作用,用更簡短易于理解的npm命令取代node?xxx.js。有的人可能覺得并沒有簡潔什么,但后期命令可能比較長假設(shè)`node?app.js?-logpath?C:\log\xx.log?--view=ejs?--DEBUG=*??`還可能有多種命令?正常運行,debug運行,編譯的。?npm不只是包管理工具,還是node命令管理工具。3.?項目入口app.js??里主要是express創(chuàng)建app實例,進(jìn)行基礎(chǔ)配置,導(dǎo)出app。bin/www??引入app對象,開啟http?server監(jiān)聽服務(wù)。相當(dāng)于原來app.js里到內(nèi)容?運行服務(wù)器到代碼抽離了出來。最終入口?bin/www4.?路由根級別路由在app.js中,導(dǎo)入了router/xxx.js的子路由。//?根級路由。?//?把項目邏輯按大模塊劃分更清晰。例如users包括注冊、登陸;//?支付模塊包括支付寶、微信。//?子路由?route/xxx.js?被注入到了總對象app中。優(yōu)點,劃分功能邏輯,適合大型項目開發(fā)。http://www.expressjs.com.cn/4x/api.html#router.route5.?報錯主要看報錯結(jié)論Error:?xxx??和報錯棧跟自己寫的代碼相關(guān)的。如果信息不足百度'?express?Errorxxx'
如果想檢查邏輯和變量信息,簡易大斷點的debug,但是vscode總會啟動錯誤路徑的其它的js文件,無法正常debug。需要手動編輯vscode的debug文件。目錄右鍵拷貝入口js文件的絕對路徑,修改到配置文件的program值里面。6.?框架提供了基本架構(gòu),但是自己的業(yè)務(wù)邏輯可能需要其它包。
##?可能的報錯node?find?modules??未安裝依賴報了一堆錯?properbly?not?npm?failt?,?原因?win7的powershell運行node?xxx.js有問題顯示成功,但項目文件夾內(nèi)無內(nèi)容。?原因,系統(tǒng)問題文件沒創(chuàng)建成功,嘗試再次運行。訪問不到局域網(wǎng)投屏地址
來源:
https://www.icode9.com/content-4-562401.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。