sails.config.http
應用程式底層 HTTP 伺服器的設定。這些屬性通常在 config/http.js
設定檔中指定。
屬性 | 類型 | 預設值 | 詳細資訊 |
---|---|---|---|
middleware |
請參閱 HTTP 中介軟體的慣例預設值 | 應用程式將對每個傳入的 HTTP 請求執行的所有 HTTP 中介軟體函數的字典。 範例 |
|
middleware.order |
請參閱 HTTP 中介軟體順序的慣例預設值 | 一個中介軟體名稱(字串)陣列,指示所有傳入的 HTTP 請求應執行的中介軟體順序。 | |
cache |
31557600000 (1 年) |
當您的應用程式在 「production」環境中執行時,快取 靜態資源 的毫秒數。 更具體地說,這是「Cache-Control」標頭中將包含的「max-age」,用於回應靜態資源的請求—即任何由 Express 靜態中介軟體提供的平面檔案,例如圖片、腳本、樣式表等。 |
|
serverOptions |
{} |
僅限 SSL:進階選項,用於在建立伺服器時直接傳送至 Node https 模組。這些選項將與您的 SSL 設定(如果有的話)合併。請參閱 createServer 文件以取得更多資訊。 |
|
trustProxy |
未定義 |
這會告知 Sails/Express 應如何解讀 "X-Forwarded" 標頭。僅當您使用 HTTPS 且部署在代理伺服器後方(例如,像 Heroku 這樣的 PaaS)時,才使用此設定。如果您的應用程式不符合該描述,則將其保留為未定義。否則,您可以從設定為 true 開始,這適用於許多部署。如果這不起作用,請參閱 此處 以取得所有可用的選項。 |
body parser 是 Sails/Express 應用程式用來讀取和理解傳入 HTTP 請求主體的工具。有許多不同的 body parser 可用,每個都有其優點和缺點。預設情況下,Sails 應用程式使用 Skipper,這是一個通用的解決方案,它知道如何解析大多數種類的 HTTP 請求主體,並提供對流式傳輸、multipart 檔案上傳的支援。
您可以指定不同的 body parser 或具有
req
、res
和next
參數的自訂函數(就像任何其他 HTTP 中介軟體函數一樣)。
若要自訂 Skipper,首先請確保在您的應用程式中執行 npm install skipper --save
。接下來,取消註解您的 config/http.js
檔案中的以下程式碼
bodyParser: (function _configureBodyParser(){
var skipper = require('skipper');
var middlewareFn = skipper({
strict: true,
// ... more Skipper options here ...
});
return middlewareFn;
})(),
然後從下表中傳入以下任何選項。
屬性 | 類型 | 預設值 | 詳細資訊 |
---|---|---|---|
maxWaitTimeBeforePassingControlToApp |
500 |
在處理傳入的 multipart 請求時,將控制權傳遞給應用程式的策略和控制器之前,要等待的最長毫秒數。如果此毫秒數已過,但沒有任何傳入的檔案上傳,並且請求尚未完成傳送其他資料(例如文字參數)(即表單發出「close」),則將立即傳遞控制權。對於在特定負載平衡器、代理伺服器和/或 SSL 組合後方執行的應用程式,可能需要增加此延遲(請參閱 https://github.com/balderdashy/skipper/issues/71#issuecomment-217556631))。 | |
maxTimeToWaitForFirstFile |
10000 |
在任何給定 upstream 中等待第一個檔案上傳到達的最長毫秒數,然後觸發 .upload() 的 callback。如果給定 upstream 上的第一個檔案上傳未在此毫秒數過去之前到達,則會觸發 ETIMEOUT 錯誤。 |
|
maxTimeToBuffer |
4500 |
在任何給定 live upstream 開始接收傳入的檔案上傳後,等待其插入接收器的最長毫秒數。Skipper 會暫停 upstreams,以允許您應用程式的策略和控制器動作中的自訂程式碼執行(例如執行資料庫查詢),然後您再將傳入的檔案上傳「插入」到您想要的上传目標(本機磁碟、S3、gridfs 等)(例如 req.file('avatar').upload(...) )。傳入的位元組使用 Node.js 串流中內建的 緩衝和 TCP 背壓組合 進行管理。最大緩衝時間是一個可設定的防禦層,用於防止嘗試使用待處理的檔案上傳來淹沒伺服器的阻斷服務攻擊。如果超過逾時時間,將會觸發 EMAXBUFFER 錯誤。對抗這些類型攻擊的最佳防禦措施是在控制器動作的最頂端儘早將傳入的檔案上傳插入到接收器中。 |
|
strict |
true |
啟用後,只有當傳入 HTTP 請求的主體看起來像是陣列或字典(即純 JavaScript 物件)時,才會將其解析為 JSON。否則,如果停用,body parser 將接受 JSON.parse() 接受的任何內容(包括 null 、true 、false 、數字和雙引號包裝的字串)。雖然這些其他類型的資料在實務中並不常見,但它們在技術上與 JSON 相容;因此,預設情況下會啟用此設定。 |
|
extended |
true |
是否理解 URL 編碼請求主體中方括號表示法中的多個文字參數(例如 courseId[]=ARY%20301&courseId[]=PSY%20420 )將 HTTP 主體編碼為陣列(例如 courseId: ['ARY 301', 'PSY 420'], ... )。預設為啟用。請參閱 https://github.com/expressjs/body-parser#extended 以取得更多詳細資訊。 |
|
onBodyParserError |
(請參閱詳細資訊) | 一個可選的函數,如果 Skipper 在解析請求主體時遇到錯誤(例如,如果它遇到格式錯誤的 JSON)時,將會呼叫此函數。該函數接受四個參數:err 、req 、res 和 next 。Sails 提供了一個預設實作,它會以 400 狀態和詳細說明所遇到錯誤的訊息來回應請求。如果未提供 onBodyParserError 函數,則 parser 錯誤將會傳遞給 next() 並由下一個可用的 錯誤處理中介軟體 處理。 |
請注意,為了允許效能調整和其他進階設定,您以此方式傳遞給 Skipper 的選項也會傳遞給底層的 Express body parser。請參閱 body-parser repo 以取得完整的底層選項清單。
大多數與 Express、Connect、Kraken、Loopback 或 Pillar 相容的中介軟體也可以在 Sails 應用程式中使用。
- 請注意,在
sails.config.http.middleware
中設定的此 HTTP 中介軟體堆疊僅適用於真正的 HTTP 請求—在處理虛擬請求(例如 sockets)時會被忽略。- 名為
router
的中介軟體處理應用程式的所有顯式路由(即sails.config.routes
),以及為藍圖、策略等注入的陰影路由。- 您不能使用鍵
order
定義自訂中介軟體函數(因為sails.config.http.middleware.order
具有特殊含義)。