1、概述
Express 5.0仍处于beta测试阶段,但这里是版本中的更改以及如何将Express 4应用迁移到Express 5的预览。
Express 5与Express 4没有太大区别:API的变化不像从3.0到4.0那么重要。 虽然基本API保持不变,但仍有突破性变化;换句话说,如果您将现有的Express 4程序更新为使用Express 5,则该程序可能无法工作。
要安装最新的beta并预览Express 5,请在应用程序根目录中输入以下命令:
npm install express@5.0.0-beta.1 --save
目前最新的版本是beta.1版本,这是第一个Express 5.0测试版,基于4.17.2。
然后,您可以运行自动化测试来查看失败的内容,并根据下面列出的更新来修复问题。解决测试失败后,运行您的应用以查看发生了哪些错误。您将立即发现应用是否使用了不受支持的任何方法或属性。
2、Express 5的变化
以下是将影响Express用户的更改列表(从alpha 2版本开始)。 请参阅拉取请求以获取所有计划功能的列表。
2.1 弃用或删除内容的列表:
- app.param(name,fn)的name参数中的前导冒号
- app.del
- app.param(fn)
- req.acceptsCharset
- req.acceptsEncoding
- req.acceptsLanguage
- res.json(obj, status)
- res.json(status, obj)
- res.jsonp(obj, status)
- res.jsonp(status, obj)
- req.param()
- res.redirect(url, status)
- res.send(body, status)
- res.send(status)
- res.send(status, body)
- res.sendfile
- res.vary()
如果您在应用中使用这些方法或属性中的任何一个,它都将报错。因此,您需要在更新到版本5后更改应用中的方法或者属性。
app.param(name,fn)名称中的前导冒号(:)
app.param(name, fn)
函数名称中的前导冒号(:)是Express 3的残余,为了向后兼容,Express 4通过弃用通知支持它。Express 5将默默地忽略它,并使用name参数,而不使用冒号作为前缀。
如果您遵循app.paramapp.paramapp.param的Express4文档,这应该不会影响您的代码,因为它没有提到前导冒号。
开始修改版本:5.0.0-alpha.2 / 2015-07-06
app.del()
Express 5不再支持app.del()
功能。如果使用此函数,则会抛出错误。要注册HTTP DELETE路由,请使用app.delete()
函数。
最初使用del
而不是delete
,因为delete
是JavaScript中的保留关键字。但是,从ECMAScript 6开始,delete
和其他保留关键字可以合法地用作属性名称。
从版本3.6.0开始弃用
app.param(fn)
app.param(fn)
签名用于修改app.param(name, fn)
函数的行为。自v4.11.0以来,它已被弃用,Express 5根本不再支持它。
版本5.0.0-alpha.2 / 2015-07-06 对方法进行移除
复数方法名
以下方法名称已使用复数形式。在Express 4中,使用旧方法会导致弃用警告。 Express 5不再支持它们:
req.acceptsCharset()
替换为req.acceptsCharsets()
。
req.acceptsEncoding()
替换为req.acceptsEncodings()
。
req.acceptsLanguage()
替换为req.acceptsLanguages()
。
从 5.0.0-alpha.1 / 2014-11-06 开始移除
res.json(obj,status)
Express 5不再支持签名res.json(obj, status)
。然后像这样将其链接到res.json()
方法:res.status(status).json(obj)
.
从 5.0.0-alpha.1 / 2014-11-06 开始移除
res.jsonp(obj,status)
Express 5不再支持签名res.jsonp(obj, status)
。然后像这样将其链接到res.jsonp()
方法:res.status(status).jsonp(obj)
.
从 5.0.0-alpha.1 / 2014-11-06 开始移除
req.param(name)
这种检索表单数据的潜在混乱和危险的方法已被删除。现在需要在req.params
、req.body
或req.query
对象中专门查找提交的参数名。
从5.0.0-alpha.2 / 2015-07-06开始移除
res.send(body,status)
Express 5不再支持签名res.send(obj, status)
。然后像这样将其链接到res.send()
方法:res.status(status).send(obj)
.
从 5.0.0-alpha.1 / 2014-11-06 开始移除
res.send(status)
Express 5不再支持签名res.send(status)
,其中status
是一个数字。相反,使用res.sendStatus(statusCode)
函数,它设置HTTP响应头状态代码并发送代码的文本版本:“Not Found”、“Internal Server Error”等。 如果您需要使用res.send()
函数发送一个数字,请将该数字引用以将其转换为字符串,以便Express不会将其解释为试图使用不受支持的旧签名。
从 5.0.0-alpha.1 / 2014-11-06 开始移除
res.sendfile()
在Express 5中,res.sendfile()
函数已被骆驼式版本res.sendFile()
取代。
从 5.0.0-alpha.1 / 2014-11-06 开始移除
res.redirect(url, status)
Express 5不再支持签名res.redirect(url, status)
。相反,设置状态,然后像这样将其链接到res.send()
方法:res.status(status).send(obj)
.
从 5.0.0-alpha.6 / 2014-11-06 开始移除
res.vary()
从5.0.0-alpha.3 / 2017-01-28 开始移除
2.2 重构的内容列表:
- 将路由器移动到它自己的存储库
把路由模块单独拆成了一个仓库,地址如下所示:
GitHub - pillarjs/router: Simple middleware-style router
2.3 发布变更列表:
- 在所有处理程序中添加对Promises的支持
- 返回app.router,它通常用于直接调用路由器
- 使查询解析器选项默认为“simple”
- 使bodyParser.urlencoded默认为'simple'
- 使req.host实际返回主机,之前返回的是主机名
req.query
应该是getter,而不是通过中间件添加- 新路径匹配语法
- 删除Express 3.x中间件错误存根
- 使用mime-types而不是mime
- 使用绝对路径检测模块