黑人的命也是命。
支持平等司法倡议.

迁移到 Express 5

概述

Express 5.0 仍处于 beta 版发布阶段,但以下是即将发布的更改的预览以及如何将您的 Express 4 应用程序迁移到 Express 5。

要安装最新的 beta 版并预览 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 将静默忽略它,并使用名称参数而不添加冒号前缀。

如果您遵循 Express 4 文档中关于 app.param 的说明,这不会影响您的代码,因为它没有提到前导冒号。

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 时。以下是对如何将路径字符串与传入请求匹配所做的更改

从中间件和处理程序处理拒绝的承诺

返回拒绝承诺的请求中间件和处理程序现在通过将拒绝的值作为 Error 转发到错误处理中间件来处理。这意味着使用 async 函数作为中间件和处理程序比以往更容易。当在 async 函数中抛出错误或在异步函数中 await 拒绝的承诺时,这些错误将被传递到错误处理程序,就像调用 next(err) 一样。

有关 Express 如何处理错误的详细信息,请参阅 错误处理文档

app.router

app.router 对象在 Express 4 中被移除,但在 Express 5 中又回来了。在新版本中,此对象只是一个对基本 Express 路由器的引用,这与 Express 3 中不同,在 Express 3 中,应用程序必须显式加载它。

req.host

在 Express 4 中,req.host 函数在存在端口号的情况下会错误地将其剥离。在 Express 5 中,端口号将被保留。

req.query

req.query 属性不再是可写属性,而是一个 getter。默认查询解析器已从“extended”更改为“simple”。

改进

res.render()

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