?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
Express 5.0仍處于alpha版本階段,但這里是發(fā)布版本中的更改預(yù)覽以及如何將Express 4應(yīng)用程序遷移到Express 5。
Express 5與Express 4沒有太大差別:對API的更改沒有3.0至4.0那么重要。雖然基本的API保持不變,但仍然存在重大變化; 換句話說,如果您將其更新為使用Express 5,則現(xiàn)有Express 4程序可能無法正常工作。
要安裝最新的alpha版本并預(yù)覽Express 5,請在應(yīng)用程序根目錄中輸入以下命令:
$ npm install express@5.0.0-alpha.2 --save
然后,您可以運(yùn)行自動測試來查看失敗的情況,并根據(jù)下面列出的更新修復(fù)問題。解決測試失敗后,運(yùn)行您的應(yīng)用程序以查看發(fā)生了什么錯誤。如果應(yīng)用程序使用任何不受支持的方法或?qū)傩?,就能馬上發(fā)現(xiàn)。
以下是將作為Express用戶影響您的更改列表(截至alpha 2版本)。查看拉取請求以獲取所有計劃功能的列表。
刪減的方法和屬性
app.del()
app.param(fn)
Pluralized method names
Leading colon in name argument to app.param(name, fn)
req.param(name)
res.json(obj, status)
res.jsonp(obj, status)
res.send(body, status)
res.send(status)
res.sendfile()
修改的
app.router
req.host
req.query
改進(jìn)
res.render()
如果您在應(yīng)用中使用這些方法或?qū)傩灾械娜魏我环N,它會崩。因此,在更新到版本5后,您需要更改應(yīng)用。
Express 5不再支持該app.del()
功能。如果你使用這個函數(shù)會拋出一個錯誤。要注冊HTTP DELETE路由,請改用該app.delete()
函數(shù)。
最初del
被用來代替JavaScript delete
,因為delete
是一個保留關(guān)鍵字。但是,從ECMAScript 6開始,delete
其他保留關(guān)鍵字可合法用作屬性名稱。
該app.param(fn)
簽名用于修改app.param(name, fn)
功能的行為。它自v4.11.0以來已被棄用,并且Express 5根本不再支持。
以下方法名稱已被復(fù)數(shù)化。在Express 4中,使用舊方法會導(dǎo)致棄用警告。Express 5不再支持它們:
req.acceptsCharset()
被替換為req.acceptsCharsets()
。
req.acceptsEncoding()
被替換為req.acceptsEncodings()
。
req.acceptsLanguage()
被替換為req.acceptsLanguages()
。
app.param(name, fn)
函數(shù)名稱中的前導(dǎo)冒號(:) 是Express 3的補(bǔ)充,為了向后兼容,Express 4支持使用棄用聲明。Express 5會逐漸忽略這一點,并使用name參數(shù)而不用冒號加前綴。
如果你遵循app.param的Express 4文檔,這應(yīng)該不會影響你的代碼,因為它沒有提到前導(dǎo)冒號。
這種可能令人困惑的檢索表單數(shù)據(jù)的方法已被刪除。現(xiàn)在,您可以專門尋找在提交的參數(shù)名稱req.params
,req.body
或req.query
對象。
Express 5不再支持res.json(obj, status)
簽名。相反,設(shè)置狀態(tài),然后將其鏈接到res.json()
的方法,比如:res.status(status).json(obj)
。
Express 5不再支持簽名res.jsonp(obj, status)
。相反,設(shè)置狀態(tài),然后將其鏈接到res.jsonp()
的方法,比如:res.status(status).jsonp(obj)
。
Express 5不再支持res.send(obj, status)
簽名。相反,設(shè)置狀態(tài),然后將其鏈接到res.send()
方法,比如:res.status(status).send(obj)
。
Express 5不再支持res.send(status)
簽名,其中status
是一個數(shù)字。相反,使用res.sendStatus(statusCode)
函數(shù)設(shè)置HTTP響應(yīng)標(biāo)頭狀態(tài)碼并發(fā)送代碼的文本版本:“Not Found”,“Internal Server Error”等。如果您需要使用res.send()
函數(shù)發(fā)送號碼,請引用該號碼以將其轉(zhuǎn)換為字符串,以便Express不會將其解釋為嘗試使用不受支持的舊簽名。
res.sendfile()
功能已被Express 5中的駝峰式版本res.sendFile()
取代。
在Express 4中刪除的對象app.router
已經(jīng)在Express 5中復(fù)出。在新版本中,該對象只是對基本Express路由器的引用,與Express 3中的應(yīng)用程序不得不明確加載該對象不同。
在Express 4中,如果req.host
功能存在,則該功能會錯誤地將端口號除去。在Express 5中,端口號保持不變。
在Express 4.7和Express 5以后,查詢解析器選項可以接受,false
以便在您想使用自己的函數(shù)用于查詢字符串解析邏輯時禁用查詢字符串解析。
此方法現(xiàn)在對所有視圖引擎實施異步行為,避免由具有同步實現(xiàn)且違反推薦界面的視圖引擎引起的錯誤。