在线文档教程

9.转到Express 5 | 9. Moving to Express 5

转移到Express 5

概述

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.2 --save

然后,您可以运行自动测试来查看失败的情况,并根据下面列出的更新修复问题。解决测试失败后,运行您的应用程序以查看发生了什么错误。如果应用程序使用任何不受支持的方法或属性,就能马上发现。

Express 5的改进

以下是将作为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

改进

  • res.render()

删除的方法和属性

如果您在应用中使用这些方法或属性中的任何一种,它会崩。因此,在更新到版本5后,您需要更改应用。

app.del()

Express 5不再支持该app.del()功能。如果你使用这个函数会抛出一个错误。要注册HTTP DELETE路由,请改用该app.delete()函数。

最初del被用来代替JavaScript delete,因为delete是一个保留关键字。但是,从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()

Leading colon (:) in the name for 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响应标头状态码并发送代码的文本版本:“Not Found”,“Internal Server Error”等。如果您需要使用res.send()函数发送号码,请引用该号码以将其转换为字符串,以便Express不会将其解释为尝试使用不受支持的旧签名。

res.sendfile()

res.sendfile()功能已被Express 5中的驼峰式版本res.sendFile()取代。

修改的

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以便在您想使用自己的函数用于查询字符串解析逻辑时禁用查询字符串解析。

改进

res.render()

此方法现在对所有视图引擎实施异步行为,避免由具有同步实现且违反推荐界面的视图引擎引起的错误。