关于Express 5

目录

1、概述

[2、Express 5的变化](#2、Express 5的变化)

[2.1 弃用或删除内容的列表:](#2.1 弃用或删除内容的列表:)

app.param(name,fn)名称中的前导冒号(:)

app.del()

app.param(fn)

复数方法名

res.json(obj,status)

res.jsonp(obj,status)

req.param(name)

res.send(body,status)

res.send(status)

res.sendfile()

[res.redirect(url, status)](#res.redirect(url, status))

[2.2 重构的内容列表:](#2.2 重构的内容列表:)

[2.3 发布变更列表:](#2.3 发布变更列表:)


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,请在应用程序根目录中输入以下命令:

bash 复制代码
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.paramsreq.bodyreq.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
  • 使用绝对路径检测模块
相关推荐
滚雪球~11 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语11 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
m0_7482345212 小时前
前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)
前端·webpack·node.js
丰云21 小时前
一个简单封装的的nodejs缓存对象
缓存·node.js
泰伦闲鱼21 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
敲啊敲95271 天前
5.npm包
前端·npm·node.js
j喬乔1 天前
Node导入不了命名函数?记一次Bug的探索
typescript·node.js
z千鑫1 天前
【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤
前端·vue.js·node.js
小马哥编程1 天前
原型链(Prototype Chain)入门
css·vue.js·chrome·node.js·原型模式·chrome devtools
蜜獾云2 天前
npm淘宝镜像
前端·npm·node.js