黑人生命也是命。
支持平等正義倡議.

移轉到 Express 5

概觀

Express 5.0 仍處於測試版階段,但以下為版本中變更內容的預覽,以及如何將 Express 4 應用程式移轉到 Express 5。

若要安裝最新測試版並預覽 Express 5,請在應用程式根目錄中輸入以下指令

$ npm install "express@>=5.0.0-beta.1" --save

接著,你可以執行自動化測試,查看哪些測試失敗,並根據下列更新內容修正問題。處理完測試失敗後,執行你的應用程式,查看發生哪些錯誤。如果你發現應用程式使用任何不受支援的方法或屬性,你會立即得知。

Express 5 中的變更

已移除的方法和屬性

已變更

改進

已移除的方法和屬性

如果您在應用程式中使用這些方法或屬性,它將會崩潰。因此,您需要在更新至版本 5 後變更您的應用程式。

app.del()

Express 5 不再支援 app.del() 函式。如果您使用此函式,將會擲回錯誤。若要註冊 HTTP DELETE 路由,請改用 app.delete() 函式。

最初使用 del 而不是 delete,因為 delete 是 JavaScript 中的保留關鍵字。然而,自 ECMAScript 6 起,delete 和其他保留關鍵字可合法地用作屬性名稱。

app.param(fn)

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) 名稱中的冒號 (:)

app.param(name, fn) 函式名稱中的冒號字元 (:) 是 Express 3 的殘留物,為了向後相容,Express 4 在不建議使用的公告中支援它。Express 5 將會靜默略過它,並使用名稱參數,而不會在前面加上冒號。

如果您遵循 app.param 的 Express 4 文件,這不應影響您的程式碼,因為它沒有提到冒號。

req.param(name)

這種可能會造成混淆且危險的取得表單資料方式已被移除。現在您需要特別在 req.paramsreq.bodyreq.query 物件中尋找已提交的參數名稱。

res.json(obj, status)

Express 5 不再支援 res.json(obj, status) 簽章。請改為設定狀態,然後將其串連到 res.json() 方法,如下所示:res.status(status).json(obj)

res.jsonp(obj, status)

Express 5 不再支援 res.jsonp(obj, status) 簽章。請改為設定狀態,然後將其串連到 res.jsonp() 方法,如下所示:res.status(status).jsonp(obj)

res.send(body, status)

Express 5 不再支援 res.send(obj, status) 簽章。請改為設定狀態,然後將其串連到 res.send() 方法,如下所示:res.status(status).send(obj)

res.send(status)

Express 5 不再支援 res.send(status) 簽章,其中 status 是數字。請改用 res.sendStatus(statusCode) 函式,它會設定 HTTP 回應標頭狀態碼並傳送該碼的文字版本:例如「找不到」、「內部伺服器錯誤」等。如果您需要使用 res.send() 函式傳送數字,請將數字加上引號轉換為字串,讓 Express 不會將其解譯為嘗試使用不受支援的舊簽章。

res.sendfile()

res.sendfile() 函式在 Express 5 中已由駝峰式大小寫的 res.sendFile() 版本取代。

已變更

路徑路由比對語法

路徑路由比對語法是指將字串提供為 app.all()app.use()app.METHOD()router.all()router.METHOD()router.use() API 的第一個參數時。路徑字串與傳入要求比對的方式已進行以下變更

已拒絕的承諾從中間件和處理常式處理

現在,會將傳回已拒絕承諾的請求中介軟體和處理常式視為錯誤,並將已拒絕的值轉發給錯誤處理中介軟體。這表示使用 async 函數作為中介軟體和處理常式比以往更容易。當在 async 函數中擲出錯誤,或在 async 函數內 await 已拒絕的承諾時,這些錯誤將傳遞給錯誤處理常式,就像呼叫 next(err) 一樣。

Express 如何處理錯誤的詳細資訊已在 錯誤處理文件 中說明。

app.router

在 Express 4 中移除的 app.router 物件已在 Express 5 中回歸。在新版本中,此物件只是一個參考基本 Express 路由器的參考,這與 Express 3 中應用程式必須明確載入它的情況不同。

req.host

在 Express 4 中,如果 req.host 函數存在,它會錯誤地移除埠號。在 Express 5 中,埠號會保留。

req.query

req.query 屬性不再是可寫屬性,而是 getter。預設查詢剖析器已從「延伸」變更為「簡單」。

改進

res.render()

此方法現在強制執行所有檢視引擎的非同步行為,避免由同步實作的檢視引擎造成的錯誤,並違反建議的介面。