Moving to Express 5

Overview

Express 5.0仍处于Alpha发行阶段,但以下是该发行版中所做更改的预览以及如何将Express 4应用迁移到Express 5.

Express 5与Express 4差别不大:对API的更改没有像从3.0到4.0那样重要. 尽管基本API保持不变,但仍存在重大变化. 换句话说,如果您将其更新为使用Express 5,则现有的Express 4程序可能无法运行.

要安装最新的Alpha并预览Express 5,请在应用程序根目录中输入以下命令:

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

然后,您可以运行自动化测试以查看失败的原因,并根据下面列出的更新修复问题. 解决测试失败后,运行您的应用程序以查看发生了什么错误. 您会立即了解该应用程序是否使用了不支持的任何方法或属性.

Changes in Express 5

以下是更改列表(从alpha 2版本开始),这些更改将影响您作为Express的用户. 有关所有计划功能的列表,请参阅请求请求 .

删除的方法和属性

Changed

Improvements

Removed methods and properties

如果您在应用中使用这些方法或属性中的任何一种,它将崩溃. 因此,您需要在更新到版本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不再支持它.

Pluralized method names

以下方法名称已被复数. 在Express 4中,使用旧方法会导致弃用警告. Express 5不再支持它们:

req.acceptsCharset()替换为req.acceptsCharsets() .

req.acceptsEncoding() is replaced by req.acceptsEncodings().

req.acceptsLanguage()替换为req.acceptsLanguages() .

Leading colon (:) in the name for app.param(name, fn)

app.param(name, fn)函数app.param(name, fn)中的冒号(:)前导是Express 3的残余,并且为了向后兼容,Express 4支持弃用通知. Express 5将默默地忽略它,并使用name参数,而不用冒号作为前缀.

如果您遵循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()

在Express 5中, res.sendfile()函数已替换为驼峰式版本res.sendFile() .

Changed

app.router

在Express 4中已删除的app.router对象在Express 5中已卷土重来.在新版本中,此对象只是对基本Express路由器的引用,而在Express 3中,应用程序必须显式地加载它.

req.host

在Express 4中, req.host函数错误地剥离了端口号(如果存在). 在Express 5中,将保留端口号.

req.query

从Express 4.7和Express 5开始,如果要使用自己的函数进行查询字符串解析逻辑,则查询解析器选项可以接受false来禁用查询字符串解析.

Improvements

res.render()

此方法现在对所有视图引擎强制执行异步行为,避免了由具有同步实现且违反推荐接口的视图引擎引起的错误.

by  ICOPY.SITE