express自動生成的app.js中有一段代碼用app.set和app.use對express進行配置,但這些配置都是什么意思,以及都能做哪些配置並沒有展開。這一節就專門來講express的配置。上節已經介紹了幾個設置,接下來先介紹剩下的幾個:
app.use(express.favicon()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router);
express.favicon(iconPath):用來設置網站的圖標,參數為圖標的路徑。如果不指明,則用默認的express圖標。可以修改為:
app.use(express.favicon(path.join(__dirname, '../public/img/favicon.ico')))
express.bodyParser(): 對請求內容進行解析,支持json、 application/x-www-form-urlencoded、multipart/form-data 格式數據的解析。也就是說ajax和form發送請求時,都會經過它的處理,方便在req中獲取相應的請求值。在express中處理文件上傳也是用它,可以給出參數指明上傳文件存放的路徑,比如:
app.use(express.bodyParser({uploadDir:'./uploads'}))
express.methodOverride():為了支持put、delete等HTTP方法,不過要客戶端配合,包含相應的_method參數,比如:
<form action='/users/1'> ... <input type="hidden" name="_method" value="put" /> </form>
可以對應到:
app.put('/users/:id', users.put)
app.use(express.cookieParser('your secret here'));和app.use(express.session());:是為了支持session,在這樣的設置中,session會被加密保存在客戶端的cookie,但這樣程序重啟后session就不起作用了,不過express.session支持session的持久化保存,因為express用的最多的數據庫就是mongo,所以下面給出用mongo保存session的配置。首先要在package.json里加上依賴項connect-mongo:
"connect-mongo": "0.3.3"
然后在config/express.coffee中引入connect-mongo,並修改express.session的設置:
mongoStore = require('connect-mongo')(express) app.use express.session secret: '1234567890' store: new mongoStore url: config.db, collection : 'sessions'
app.router是connect router的加強版,用來處理app.get,app.post等請求處理設置,在瀏覽器訪問這些設置中對應的url時,express.router會調用相應的function。如果不顯式調用app.use(app.router),express會在第一次碰到app.get(...)之類的設置時隱含調用,所以這個可以不用出現在配置項里,但.use的順序很關鍵,所以顯式調用比較好。比如在use中出現app.use(express.static(path.join(__dirname, 'public')));時,如果router沒有出現,或被放在了它后面,那服務器每次遇到請求就會到硬盤上找有沒有對應的靜態文件,會造成性能下降。
這些是express最基本的配置項,其他常用的配置項,比如壓縮、數據校驗、認證和授權等都可以放在這里,下節繼續介紹。
轉載自:圖靈社區
express自動生成的app.js中有一段代碼用app.set和app.use對express進行配置,但這些配置都是什么意思,以及都能做哪些配置並沒有展開。這一節就專門來講express的配置。上節已經介紹了幾個設置,接下來先介紹剩下的幾個:
app.use(express.favicon()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router);
express.favicon(iconPath):用來設置網站的圖標,參數為圖標的路徑。如果不指明,則用默認的express圖標。可以修改為:
app.use(express.favicon(path.join(__dirname, '../public/img/favicon.ico')))
express.bodyParser(): 對請求內容進行解析,支持json、 application/x-www-form-urlencoded、multipart/form-data 格式數據的解析。也就是說ajax和form發送請求時,都會經過它的處理,方便在req中獲取相應的請求值。在express中處理文件上傳也是用它,可以給出參數指明上傳文件存放的路徑,比如:
app.use(express.bodyParser({uploadDir:'./uploads'}))
express.methodOverride():為了支持put、delete等HTTP方法,不過要客戶端配合,包含相應的_method參數,比如:
<form action='/users/1'> ... <input type="hidden" name="_method" value="put" /> </form>
可以對應到:
app.put('/users/:id', users.put)
app.use(express.cookieParser('your secret here'));和app.use(express.session());:是為了支持session,在這樣的設置中,session會被加密保存在客戶端的cookie,但這樣程序重啟后session就不起作用了,不過express.session支持session的持久化保存,因為express用的最多的數據庫就是mongo,所以下面給出用mongo保存session的配置。首先要在package.json里加上依賴項connect-mongo:
"connect-mongo": "0.3.3"
然后在config/express.coffee中引入connect-mongo,並修改express.session的設置:
mongoStore = require('connect-mongo')(express) app.use express.session secret: '1234567890' store: new mongoStore url: config.db, collection : 'sessions'
app.router是connect router的加強版,用來處理app.get,app.post等請求處理設置,在瀏覽器訪問這些設置中對應的url時,express.router會調用相應的function。如果不顯式調用app.use(app.router),express會在第一次碰到app.get(...)之類的設置時隱含調用,所以這個可以不用出現在配置項里,但.use的順序很關鍵,所以顯式調用比較好。比如在use中出現app.use(express.static(path.join(__dirname, 'public')));時,如果router沒有出現,或被放在了它后面,那服務器每次遇到請求就會到硬盤上找有沒有對應的靜態文件,會造成性能下降。
這些是express最基本的配置項,其他常用的配置項,比如壓縮、數據校驗、認證和授權等都可以放在這里,下節繼續介紹。
轉載自:圖靈社區
