发布变更日志

Express 的所有最新更新、改进和修复

Express v5

5.1.0 - 发布日期:2025-03-31

5.1.0 次要版本包含一些新功能和改进

  • 支持将响应作为 Uint8Array 发送
  • res.sendFile() 中增加了对 ETag 选项的支持
  • res.links() 中增加了对添加具有相同 rel 的多个链接的支持
  • 性能:对 acceptParams 使用循环
  • [email protected]
    • 移除 Brotli & AsyncLocalStorage 的传统 Node.js 支持检查
    • 移除 unpipe & destroy
  • [email protected]
    • 恢复 debug。现在使用 router 作用域而不是 express
    • 移除 setImmediate 的传统 Node.js 支持检查
    • 废弃非原生 Promise 支持
    • 移除 after, safe-buffer, array-flatten, setprotoypeof, methods, utils-merge
  • [email protected]
    • 移除 headersSent, setImmediate, & http2 支持的传统 Node.js 支持检查
    • 移除 unpipe
  • 将所有剩余的依赖项转换为使用 ^ 范围而不是锁定版本
  • 添加 package.json funding 字段以突出我们的 OpenCollective
  • 查看 Changelog v5.1.0

    5.0.1 - 发布日期:2024-10-08

5.0.1 补丁版本包含一个安全修复

5.0.0 - 发布日期:2024-09-09

请查阅迁移指南,了解此 Express 新版本中的所有更改。

Express v4

4.21.2 - 发布日期:2024-11-06

4.21.2 补丁版本包含一个安全修复

4.21.1 - 发布日期:2024-10-08

4.21.1 补丁版本包含一个安全修复

4.21.0 - 发布日期:2024-09-11

4.21.0 次要版本包含一个新功能

  • 废弃 res.location("back")res.redirect("back") 魔法字符串

4.20.0 - 发布日期:2024-09-10

4.20.0 次要版本包含错误修复和一些新功能,其中包括

有关此版本中更改的完整列表,请参阅 History.md

4.19.2 - 发布日期:2024-03-25

  • 改进了开放重定向允许列表绕过修复

有关此版本中更改的完整列表,请参阅 History.md

4.19.1 - 发布日期:2024-03-20

  • 允许使用新的编码处理检查将非字符串传递给 res.location

有关此版本中更改的完整列表,请参阅 History.md

4.19.0 - 发布日期:2024-03-20

  • 防止由于 encodeurl 导致的开放重定向允许列表绕过
  • deps: [email protected]

有关此版本中更改的完整列表,请参阅 History.md

4.18.3 - 发布日期:2024-02-29

4.18.3 补丁版本包含以下错误修复

  • 修复无方法路由请求的问题。( commit )

有关此版本中更改的完整列表,请参阅 History.md

4.18.2 - 发布日期:2022-10-08

4.18.2 补丁版本包含以下错误修复

  • 修复单一路由中大型堆栈的路由回归问题。( commit )

有关此版本中更改的完整列表,请参阅 History.md

4.18.1 - 发布日期:2022-04-29

4.18.1 补丁版本包含以下错误修复

  • 修复当 Express 应用程序使用大量路由堆栈创建,并且所有这些路由都是同步的(同步调用 next())时,请求处理可能会挂起的条件。

有关此版本中更改的完整列表,请参阅 History.md

4.18.0 - 发布日期:2022-04-25

4.18.0 次要版本包含错误修复和一些新功能,其中包括

  • app.get() 方法app.set() 方法在获取设置值时现在会忽略 Object.prototype 上的直接属性。

  • res.cookie() 方法现在接受一个“priority”选项,用于在 Set-Cookie 响应头中设置 Priority 属性。

  • res.cookie() 方法现在会拒绝将无效 Date 对象作为“expires”选项提供。

  • res.cookie() 方法现在在显式提供 nullundefined 作为“maxAge”参数时也能正常工作。

  • 从此版本开始,Express 支持 Node.js 18.x。

  • res.download() 方法现在接受一个“root”选项,以匹配 res.sendFile()

  • res.download() 方法可以提供一个 options 对象,而无需提供 filename 参数,当需要默认 filename 时,简化了调用。

  • res.format() 方法现在会以与类型处理程序(req, resnext)相同的参数调用提供的“default”处理程序。

  • 当响应代码设置为 205 时,res.send() 方法将不会尝试发送响应体。

  • 默认错误处理程序现在将移除某些响应头,如果这些头之前已设置,它们可能会破坏错误响应的渲染。

  • 状态码 425 现在表示为标准的“Too Early”,而不是“Unordered Collection”。

有关此版本中更改的完整列表,请参阅 History.md

4.17.3 - 发布日期:2022-02-16

4.17.3 补丁版本包含一个错误修复

  • 更新 qs 模块以修复解析 __proto__ 属性的问题。

有关此版本中更改的完整列表,请参阅 History.md

4.17.2 - 发布日期:2021-12-16

4.17.2 补丁版本包含以下错误修复

  • 修复在提供回调时 res.jsonpundefined 的处理。

  • 修复在启用 "json escape"res.jsonres.jsonpundefined 的处理。

  • 修复 res.cookie()maxAge 选项的无效值处理。

  • 更新到 jshttp/proxy-addr 模块,使用 req.socket 而不是已废弃的 req.connection

  • 从此版本开始,Express 支持 Node.js 14.x。

有关此版本中更改的完整列表,请参阅 History.md

4.17.1 - 发布日期:2019-05-25

4.17.1 补丁版本包含一个错误修复

  • res.status() API 的更改已回滚,因为它导致现有 Express 4 应用程序出现回归。

有关此版本中更改的完整列表,请参阅 History.md

4.17.0 - 发布日期:2019-05-16

4.17.0 次要版本包含错误修复和一些新功能,其中包括

  • 已添加 express.raw()express.text() 中间件,以提供对更多原始请求负载的请求体解析。这底层使用了 expressjs/body-parser 模块,因此目前单独引用该模块的应用程序可以切换到内置解析器。

  • res.cookie() API 现在支持 sameSite 选项的 "none" 值。

  • 当启用 "trust proxy" 设置时,req.hostname 现在支持请求中的多个 X-Forwarded-For 头。

  • 从此版本开始,Express 支持 Node.js 10.x 和 12.x。

  • 当将非字符串作为 path 参数传递时,res.sendFile() API 现在会提供一个更直接、更容易理解的错误。

  • 当将 nullundefined 作为参数传递时,res.status() API 现在会提供一个更直接、更容易理解的错误。

有关此版本中更改的完整列表,请参阅 History.md

4.16.4 - 发布日期:2018-10-10

4.16.4 补丁版本包含各种错误修复

  • 修复 res.sendfile 中可能记录 "Request aborted" 的问题。

有关此版本中更改的完整列表,请参阅 History.md

4.16.3 - 发布日期:2018-03-12

4.16.3 补丁版本包含各种错误修复

  • 修复 res.location 方法或 res.redirect 方法中 URL 末尾的纯 % 未编码为 %25 的问题。

  • 修复空的 req.url 值可能导致默认 404 处理中抛出错误的问题。

  • 修复 express.static 重定向响应生成的 HTML 文档中正确包含 </html> 的问题。

有关此版本中更改的完整列表,请参阅 History.md

4.16.2 - 发布日期:2017-10-09

4.16.2 补丁版本包含一个回归错误修复

  • 修复当 Buffer 传递给 res.send 且响应上已设置 ETag 头时,res.send 方法中可能发生的 TypeError

有关此版本中更改的完整列表,请参阅 History.md

4.16.1 - 发布日期:2017-09-29

4.16.1 补丁版本包含一个回归错误修复

  • 更新 pillarjs/send 模块,以修复影响 express.static 某些用户的边缘情况回归问题。

有关此版本中更改的完整列表,请参阅 History.md

4.16.0 - 发布日期:2017-09-28

4.16.0 次要版本包含安全更新、错误修复、性能增强和一些新功能,其中包括

  • 更新 jshttp/forwarded 模块以解决一个漏洞。如果使用了以下 API,这可能会影响您的应用程序:req.host, req.hostname, req.ip, req.ips, req.protocol

  • 更新 pillarjs/send 模块的一个依赖项,以解决 mime 依赖项中的一个漏洞。如果将不受信任的字符串输入传递给以下 API,这可能会影响您的应用程序:res.type()

  • pillarjs/send 模块已针对 Node.js 8.5.0 的漏洞实施了保护。将任何早期版本的 Express 与 Node.js 8.5.0(该特定 Node.js 版本)一起使用,将使以下 API 容易受到攻击:express.static, res.sendfileres.sendFile

  • 从此版本开始,Express 支持 Node.js 8.x。

  • 新设置 "json escape" 可以启用,以转义 res.json(), res.jsonp()res.send() 响应中的字符,这些字符可能触发客户端将响应嗅探为 HTML 而不是遵循 Content-Type。这有助于保护 Express 应用程序免受一类基于持久性 XSS 的攻击。

  • res.download() 方法现在接受一个可选的 options 对象。

  • 已添加 express.json()express.urlencoded() 中间件,以提供开箱即用的请求体解析支持。这底层使用了 expressjs/body-parser 模块,因此目前单独引用该模块的应用程序可以切换到内置解析器。

  • express.static() 中间件res.sendFile() 方法现在支持在 Cache-Control 头上设置 immutable 指令。使用适当的 maxAge 设置此头将防止支持的网页浏览器在文件仍在其缓存中时向服务器发送任何请求。

  • pillarjs/send 模块已更新 MIME 类型列表,以更好地设置更多文件的 Content-Type。文件扩展名新增了 70 种类型。

有关此版本中更改的完整列表,请参阅 History.md

4.15.5 - 发布日期:2017-09-24

4.15.5 补丁版本包含安全更新、一些次要性能增强和错误修复

  • 更新 debug 模块以解决一个漏洞,但此问题不影响 Express。

  • 更新 jshttp/fresh 模块以解决一个漏洞。如果使用了以下 API,这将影响您的应用程序:express.static, req.fresh, res.json, res.jsonp, res.send, res.sendfile res.sendFile, res.sendStatus

  • 更新 jshttp/fresh 模块修复了带有无效日期的修改头处理,并加快了条件头(如 If-None-Match)的解析速度。

有关此版本中更改的完整列表,请参阅 History.md

4.15.4 - 发布日期:2017-08-06

4.15.4 补丁版本包含一些次要错误修复

  • 修复在某些条件下 "trust proxy" 值设置为数组时被操纵的问题。

有关此版本中更改的完整列表,请参阅 History.md

4.15.3 - 发布日期:2017-05-16

4.15.3 补丁版本包含一个安全更新和一些次要错误修复

  • 更新 pillarjs/send 模块的一个依赖项,以解决一个漏洞。如果将不受信任的字符串输入传递给以下 API 的 maxAge 选项,这可能会影响您的应用程序:express.static, res.sendfileres.sendFile

  • 修复当 res.set 无法将字符集添加到 Content-Type 时发生的错误。

  • 修复 HTML 文档中缺少 </html> 的问题。

有关此版本中更改的完整列表,请参阅 History.md

4.15.2 - 发布日期:2017-03-06

4.15.2 补丁版本包含一个次要错误修复

  • 修复扩展(默认)查询解析器中解析以 [ 开头的键的回归问题。

有关此版本中更改的完整列表,请参阅 History.md

4.15.1 - 发布日期:2017-03-05

4.15.1 补丁版本包含一个次要错误修复

有关此版本中更改的完整列表,请参阅 History.md

4.15.0 - 发布日期:2017-03-01

4.15.0 次要版本包含错误修复、性能改进以及其他次要功能添加,其中包括

  • 从此版本开始,Express 支持 Node.js 7.x。

  • express.static() 中间件res.sendFile() 方法现在支持 If-MatchIf-Unmodified-Since 请求头。

  • 更新 jshttp/etag 模块以生成默认的响应 ETag,该功能在 Node.js 启用 FIPS 兼容加密时有效。

  • 各种自动生成的 HTML 响应,例如默认的未找到和错误处理程序,将响应完整的 HTML 5 文档和附加安全头。

有关此版本中更改的完整列表,请参阅 History.md

4.14.1 - 发布日期:2017-01-28

4.14.1 补丁版本包含错误修复和性能改进,其中包括

有关此版本中更改的完整列表,请参阅 History.md

4.14.0 - 发布日期:2016-06-16

4.14.0 次要版本包含错误修复、安全更新、性能改进以及其他次要功能添加,其中包括

  • 从此版本开始,Express 支持 Node.js 6.x。

  • 更新 jshttp/negotiator 模块修复了一个正则表达式拒绝服务漏洞

  • res.sendFile() 方法现在接受两个新选项:acceptRangescacheControl

    • acceptRanges(默认为 true),启用或禁用接受范围请求。禁用时,响应不发送 Accept-Ranges 头,并忽略 Range 请求头的内容。

    • cacheControl(默认为 true),启用或禁用 Cache-Control 响应头。禁用它将忽略 maxAge 选项。

    • res.sendFile 也已更新,以更好地处理 Range 头和重定向。

  • res.location() 方法res.redirect() 方法现在将对 URL 字符串进行 URL 编码,如果它尚未编码。

  • res.json() 方法res.jsonp() 方法在常见情况下的性能已得到改进。

  • jshttp/cookie 模块(除其他多项改进外)已更新,现在 res.cookie() 方法支持 sameSite 选项,允许您指定 SameSite cookie 属性

    注意

    This attribute has not yet been fully standardized, may change in the future, and many clients may ignore it.
    

    sameSite 选项的可能值是

    • true,它将 SameSite 属性设置为 Strict,用于严格的同站策略执行。
    • false,它不设置 SameSite 属性。
    • 'lax',它将 SameSite 属性设置为 Lax,用于宽松的同站策略执行。
    • 'strict',它将 SameSite 属性设置为 Strict,用于严格的同站策略执行。
  • Windows 上的绝对路径检查(在某些情况下不正确)已修复。

  • 通过代理的 IP 地址解析已大大改进。

  • req.range() 方法的 options 对象现在支持一个 combine 选项(默认为 false),当其为 true 时,会合并重叠和相邻的范围,并像在头部中那样返回它们。

有关此版本中更改的完整列表,请参阅 History.md

编辑此页面