Node.js系列的第一篇:http,大概描述了經過使用node.js內置的api建立一個服務並監聽request實現簡單的增刪改查。如今,咱們就經過通讀express官網及使用express框架來進一步瞭解node.js。javascript
官網描述:基於 Node.js 平臺,快速、開放、極簡的 web 開發框架。css
安裝方式:html
npm install express --save
特性:前端
1.Web應用:Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你建立各類 Web 和移動設備應用。java
從本質上來講,一個 Express 應用就是在調用各類中間件。node
2.API:豐富的 HTTP 快捷方法和任意排列組合的 Connect 中間件,讓你建立健壯、友好的 API 變得既快速又簡單。git
3.性能:Express 不對 Node.js 已有的特性進行二次抽象,咱們只是在它之上擴展了 Web 應用所需的基本功能。github
Hello World:監聽3000端口起個服務web
const express=require("express"); const app=express(); app.get('/',(req,res)=>{ res.end('Hello world!') }); const server=app.listen(3000,()=>{ const host=server.address().address; const port=server.address().port; console.log(server.address()); console.log('Express app listening at http://%s:%s',host,port); })
安裝express-generatorexpress
npm install express-generator -g
經過express-generator,並簡單的建立實例並按照依賴包就能夠幫咱們快速地建立了一個應用骨架:
express
cnpm install
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
經過分析應用的結構,咱們就大概知道了,app.js是項目的入口文件,實現依賴包的引入、視圖模板引擎的設置、路由的跳轉和錯誤事件的處理;bin/www則是啓動項的配置信息;而package.json就是咱們安裝的一些依賴包及命令行啓動項目的設置;public則是前端放置的靜態文件目錄;routes和views則分別爲路由跳轉的方法和放置視圖的模板。
路由是指如何定義應用的端點(URIs)以及如何響應客戶端的請求。
路由是由一個 URI、HTTP 請求(GET、POST等)和若干個句柄組成,它的結構以下: app.METHOD(path, [callback...], callback)
, app
是 express
對象的一個實例, METHOD
是一個 HTTP 請求方法, path
是服務器上的路徑, callback
是當路由匹配時要執行的函數。
簡單的路由示例:
app.get('/',(req,res)=>{ res.end('Hello world!') });
簡單理解app.use() 和 express.Router() 的區別
Router
實例是一個完整的中間件和路由系統,所以常稱其爲一個 「mini-app」。就像官網描述的Router常被稱爲「mini-app」,因此在使用app.method和express.Router上會存在很大的疑惑。
其實,咱們能夠簡單的瀏覽下express-generator起的應用骨架能夠了解到,app.use通常應用於全局的處理(例如全局中間件的引入等),而express.Router則偏向於具體業務邏輯的處理(其實我的以爲就是爲了實現模塊化的處理:正如官網描述可以使用 express.Router
類建立模塊化、可掛載的路由句柄)。
中間件(Middleware) 是一個函數,它能夠訪問請求對象(request object (req
)), 響應對象(response object (res
)), 和 web 應用中處於請求-響應循環流程中的中間件,通常被命名爲 next
的變量。
中間件的功能包括:
若是當前中間件沒有終結請求-響應循環,則必須調用 next()
方法將控制權交給下一個中間件,不然請求就會掛起。
express框架設置jade爲默認模板引擎的代碼:
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
就我我的而言,並非要jade,而是返璞歸真的使用的html。則咱們須要作的處理是:註釋上兩條代碼並引入ejs進行模板的調整
var ejs=require('ejs'); app.engine('html',ejs.renderFile); app.set('view engine','html');
而後咱們就能夠在./views裏面直接新建x.html了。
參考:http://www.expressjs.com.cn/4x/api.html#app.engine
當在生產環境運行Express應用程序時,使用進程管理器是頗有用的:
1.若是應用程序崩潰,會自動從新啓動。
2.深刻了解運行時性能和資源消耗。
3.動態修改設置以提升性能。
4.控制羣集。
進程管理器有點像應用服務器:它是一個「容器」,用於爲部署提供便利、提供高可用性並使您可以在運行時管理應用程序。
最受Express和其餘node應用程序歡迎的進程管理有:
StrongLoop Process Manager
PM2
Forever
使用這三種工具中的任何一種都是很是有幫助的,不過,在一個統一的接口中,使用工具爲整個Node應用程序的生命週期提供全面的運行時和部署解決方案的惟一解決方案是使用 StrongLoop 進程管理器工具來處理整個Node應用程序的生命週期。
下面簡要介紹一下其中的每一種工具。關於詳細比較,見http://strong-pm.io/compare/。
StrongLoop 進程管理器是一個Node.js應用程序的生產過程管理器,具備內置的負載平衡、監視、多主機部署和圖形控制檯。它使你可以:
將節點應用程序構建、打包並部署到本地或遠程系統。
查看CPU配置文件和堆快照,以優化性能並診斷內存泄漏。
保持進程和羣集的激活。
查看應用程序的性能度量。
使用Nginx集成輕鬆地管理多主機部署。
將多個強循環PM統一到從ARC管理的分佈式微服務運行時中。
您可使用一個強大的CLI工具、slc或圖形工具Arc來使用StrongLoop PM。它是開源的,並獲得了StrongLoop的專業支持。
安裝
npm install -g strongloop
基本用法
cd my-app
slc start
查看進程管理器和全部已部署應用程序的狀態:
slc ctl
列出全部管理下的應用程序(服務):
slc ctl ls
中止應用:
slc ctl stop my-app
重啓應用:
slc ctl restart my-app
您還能夠「軟重啓」,這讓工做線程處理一個寬限期來關閉現有的鏈接,而後從新啓動當前的應用程序:
slc ctl soft-restart my-app
從管理器中移除一個應用:
slc ctl remove my-app
PM2是帶有內置負載均衡器的Node.js應用程序的生產進程管理器。它容許您永遠保持應用程序的生存,在不停機的狀況下從新加載它們,並將促進常見的系統管理任務。它還容許您管理應用程序日誌、監視和集羣。
更多:[https://github.com/Unitech/pm2]
安裝
npm install pm2 -g
基本用法
使用pm2啓動一個應用程序須要指定應用程序的路徑。可是,中止、從新啓動和刪除只須要應用程序的名稱或id。
pm2 start app.js
使用pm2啓動一個應用程序將當即將其發送到後臺。您可使用各類pm2命令從命令行控制後臺應用程序。
一旦用pm2啓動一個應用程序,它就註冊在pm2的帶有ID的進程列表中,這樣就可使用它們的ID來管理系統上不一樣目錄的同名應用程序。
注意,若是有多個具備相同名稱的應用程序正在運行,那麼pm2命令將影響全部應用程序。因此使用ID而不是名字來管理單個的應用程序。
進程列表:
pm2 list
中止一個應用:
pm2 stop 0
重啓一個應用:
pm2 restart 0
展現更多關於應用的信息:
pm2 show 0
從pm2的註冊表中刪除應用程序:
pm2 delete 0
Forever 是一個簡單的CLI工具,用於確保給定腳本連續運行(永遠)。它簡單的界面使它很是適合運行較小的Node應用程序和腳本部署。
更多:[https://github.com/foreverjs/forever]
安裝
npm install forever -g
基本用法
要啓動腳本,請使用「forever start」命令,並指定腳本的路徑
forever start script.js
這將以守護模式(在後臺)運行腳本。
要運行附加到終端的腳本,請省略「開始」。
forever script.js
使用日誌選項-l、-o、-e記錄 forever 輸出和腳本是個好主意,以下例所示:
forever start -l forever.log -o out.log -e err.log script.js
進程列表:
forever list
要中止由 forever 中止命令啓動的腳本,並指定進程索引(由「forever 列表」命令列出)
forever stop 1
或者,指定文件的路徑:
forever stop script.js
中止全部由forever 啓動的腳本:
forever stop all
express(上)這篇博文主要是小弟根據express官網總結並添加一些本身在建項目時遇到的問題解決方案以及對express的粗瞭解,但願對想了解express的小夥伴提供一些幫助。
參考:http://www.expressjs.com.cn/