发布变更日志
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
- 移除 Brotli &
- [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 补丁版本包含一个安全修复
- 更新 jshttps/cookie 以解决一个漏洞。
5.0.0 - 发布日期:2024-09-09
请查阅迁移指南,了解此 Express 新版本中的所有更改。
Express v4
4.21.2 - 发布日期:2024-11-06
4.21.2 补丁版本包含一个安全修复
- 更新 pillajs/path-to-regexp 以解决一个漏洞。
4.21.1 - 发布日期:2024-10-08
4.21.1 补丁版本包含一个安全修复
- 更新 jshttps/cookie 以解决一个漏洞。
4.21.0 - 发布日期:2024-09-11
4.21.0 次要版本包含一个新功能
- 废弃
res.location("back")
和res.redirect("back")
魔法字符串
4.20.0 - 发布日期:2024-09-10
4.20.0 次要版本包含错误修复和一些新功能,其中包括
res.clearCookie()
方法废弃了options.maxAge
和options.expires
选项。res.redirect()
方法移除了 HTML 链接渲染。express.urlencoded()
方法现在有了32
的深度级别,而之前是Infinity
。- 增加了对使用正则表达式的路由中命名匹配组的支持
- 移除
\
,|
和^
的编码,以更好地与 URL 规范对齐
有关此版本中更改的完整列表,请参阅 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()
方法现在在显式提供null
或undefined
作为“maxAge”参数时也能正常工作。 -
从此版本开始,Express 支持 Node.js 18.x。
-
res.download()
方法现在接受一个“root”选项,以匹配res.sendFile()
。 -
res.download()
方法可以提供一个options
对象,而无需提供filename
参数,当需要默认filename
时,简化了调用。 -
res.format()
方法现在会以与类型处理程序(req
,res
和next
)相同的参数调用提供的“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.jsonp
中undefined
的处理。 -
修复在启用
"json escape"
时res.json
和res.jsonp
中undefined
的处理。 -
修复
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 现在会提供一个更直接、更容易理解的错误。 -
当将
null
或undefined
作为参数传递时,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.sendfile
和res.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 补丁版本包含安全更新、一些次要性能增强和错误修复
-
更新 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.sendfile
和res.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 补丁版本包含一个次要错误修复
-
修复使用 datejs 1.x 库时的兼容性问题,即
express.static()
中间件和res.sendFile()
方法会错误地响应 412 Precondition Failed。
有关此版本中更改的完整列表,请参阅 History.md。
4.15.0 - 发布日期:2017-03-01
4.15.0 次要版本包含错误修复、性能改进以及其他次要功能添加,其中包括
-
从此版本开始,Express 支持 Node.js 7.x。
-
express.static()
中间件和res.sendFile()
方法现在支持If-Match
和If-Unmodified-Since
请求头。 -
更新 jshttp/etag 模块以生成默认的响应 ETag,该功能在 Node.js 启用 FIPS 兼容加密时有效。
-
各种自动生成的 HTML 响应,例如默认的未找到和错误处理程序,将响应完整的 HTML 5 文档和附加安全头。
有关此版本中更改的完整列表,请参阅 History.md。
4.14.1 - 发布日期:2017-01-28
4.14.1 补丁版本包含错误修复和性能改进,其中包括
-
更新 pillarjs/finalhandler 模块修复了 Express 处理具有非对象
headers
属性的Error
对象时发生的异常。
有关此版本中更改的完整列表,请参阅 History.md。
4.14.0 - 发布日期:2016-06-16
4.14.0 次要版本包含错误修复、安全更新、性能改进以及其他次要功能添加,其中包括
-
从此版本开始,Express 支持 Node.js 6.x。
-
更新 jshttp/negotiator 模块修复了一个正则表达式拒绝服务漏洞。
-
res.sendFile()
方法现在接受两个新选项:acceptRanges
和cacheControl
。-
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。