Express 5.0 仍處於測試版階段,但以下為版本中變更內容的預覽,以及如何將 Express 4 應用程式移轉到 Express 5。
若要安裝最新測試版並預覽 Express 5,請在應用程式根目錄中輸入以下指令
$ npm install "express@>=5.0.0-beta.1" --save
接著,你可以執行自動化測試,查看哪些測試失敗,並根據下列更新內容修正問題。處理完測試失敗後,執行你的應用程式,查看發生哪些錯誤。如果你發現應用程式使用任何不受支援的方法或屬性,你會立即得知。
已移除的方法和屬性
已變更
改進
如果您在應用程式中使用這些方法或屬性,它將會崩潰。因此,您需要在更新至版本 5 後變更您的應用程式。
Express 5 不再支援 app.del()
函式。如果您使用此函式,將會擲回錯誤。若要註冊 HTTP DELETE 路由,請改用 app.delete()
函式。
最初使用 del
而不是 delete
,因為 delete
是 JavaScript 中的保留關鍵字。然而,自 ECMAScript 6 起,delete
和其他保留關鍵字可合法地用作屬性名稱。
app.param(fn)
簽章用於修改 app.param(name, fn)
函式的行為。自 v4.11.0 起已不建議使用,而 Express 5 完全不再支援它。
下列方法名稱已變為複數形式。在 Express 4 中,使用舊方法會產生不建議使用的警告。Express 5 完全不再支援它們
req.acceptsCharset()
已被 req.acceptsCharsets()
取代。
req.acceptsEncoding()
已被 req.acceptsEncodings()
取代。
req.acceptsLanguage()
已被 req.acceptsLanguages()
取代。
app.param(name, fn)
函式名稱中的冒號字元 (:) 是 Express 3 的殘留物,為了向後相容,Express 4 在不建議使用的公告中支援它。Express 5 將會靜默略過它,並使用名稱參數,而不會在前面加上冒號。
如果您遵循 app.param 的 Express 4 文件,這不應影響您的程式碼,因為它沒有提到冒號。
這種可能會造成混淆且危險的取得表單資料方式已被移除。現在您需要特別在 req.params
、req.body
或 req.query
物件中尋找已提交的參數名稱。
Express 5 不再支援 res.json(obj, status)
簽章。請改為設定狀態,然後將其串連到 res.json()
方法,如下所示:res.status(status).json(obj)
。
Express 5 不再支援 res.jsonp(obj, status)
簽章。請改為設定狀態,然後將其串連到 res.jsonp()
方法,如下所示:res.status(status).jsonp(obj)
。
Express 5 不再支援 res.send(obj, status)
簽章。請改為設定狀態,然後將其串連到 res.send()
方法,如下所示:res.status(status).send(obj)
。
Express 5 不再支援 res.send(status)
簽章,其中 status
是數字。請改用 res.sendStatus(statusCode)
函式,它會設定 HTTP 回應標頭狀態碼並傳送該碼的文字版本:例如「找不到」、「內部伺服器錯誤」等。如果您需要使用 res.send()
函式傳送數字,請將數字加上引號轉換為字串,讓 Express 不會將其解譯為嘗試使用不受支援的舊簽章。
res.sendfile()
函式在 Express 5 中已由駝峰式大小寫的 res.sendFile()
版本取代。
路徑路由比對語法是指將字串提供為 app.all()
、app.use()
、app.METHOD()
、router.all()
、router.METHOD()
和 router.use()
API 的第一個參數時。路徑字串與傳入要求比對的方式已進行以下變更
?
、*
和 +
參數修改器。(*)
不再有效,必須寫成 (.*)
,例如。req.params
中的位置。
/:foo(.*)
僅擷取為 req.params.foo
,且不可用於 req.params[0]
。/\\d+
不再有效,必須寫成 /(\\d+)
。*
路徑區段行為已移除。
/foo/*/bar
將比對中間區段的字面 *
。現在,會將傳回已拒絕承諾的請求中介軟體和處理常式視為錯誤,並將已拒絕的值轉發給錯誤處理中介軟體。這表示使用 async
函數作為中介軟體和處理常式比以往更容易。當在 async
函數中擲出錯誤,或在 async
函數內 await
已拒絕的承諾時,這些錯誤將傳遞給錯誤處理常式,就像呼叫 next(err)
一樣。
Express 如何處理錯誤的詳細資訊已在 錯誤處理文件 中說明。
在 Express 4 中移除的 app.router
物件已在 Express 5 中回歸。在新版本中,此物件只是一個參考基本 Express 路由器的參考,這與 Express 3 中應用程式必須明確載入它的情況不同。
在 Express 4 中,如果 req.host
函數存在,它會錯誤地移除埠號。在 Express 5 中,埠號會保留。
req.query
屬性不再是可寫屬性,而是 getter。預設查詢剖析器已從「延伸」變更為「簡單」。
此方法現在強制執行所有檢視引擎的非同步行為,避免由同步實作的檢視引擎造成的錯誤,並違反建議的介面。