替换在Express 4中不推荐使用的req.param()

Rad*_*own 15 node.js express

我们正在从ExpressJS 3迁移到ExpressJS 4,我们注意到以下API已被弃用:

req.param(fieldName)
req.param(fieldName, defaultValue)
Run Code Online (Sandbox Code Playgroud)

是否有一个中间件可以将这些API带回来,就像从快速模块到独立模块"外部化"的其他API一样?

编辑:澄清 - 需要一个API,它提供对参数的抽象泛型访问,无论它是路径参数,查询字符串参数还是正文字段.

sek*_*i92 15

基于Express Documentation,我们应该这样使用

快递3

req.param(fieldName)
Run Code Online (Sandbox Code Playgroud)

快递4

req.params.fieldName
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢req.params.fieldName而不是req.param(fieldName)

  • `req.params.fieldName`不能与`?=&`url样式一起使用...`req.param()`仍然可以。 (3认同)

Hen*_*son 8

你为什么要把它带回来?有一个原因是它已被弃用,因此你应该放弃它.

有关他们弃用API的原因的讨论可以在他们的问题跟踪器中找到#2440.

该函数是一种快速而肮脏的方法,可以从中获取参数值req.params,req.body或者req.query.这当然会在某些情况下造成麻烦,这就是为什么他们要删除它.在这里看看自己的功能.

如果您只是将函数用于url参数,则只需将其替换为以下检查req.query['smth'] or 'default':

var param_old = req.param('test', 'default');
var param_new = req.query['test'] || 'default';
Run Code Online (Sandbox Code Playgroud)

(请注意,对空字符串进行评估false,因此它们实际上并非100%相等.您想要的当然取决于您,但在大多数情况下它应该无关紧要.)


Rad*_*own 6

好的,在阅读@Ineentho的参考文献中给出的主题后,我们决定提出以下答案:

https://github.com/osher/request-param

一个connect/express中间件,用于启用快递4中不推荐使用的req.param(名称,默认)API

中间件不仅带来了goo'old功能.它还允许您自定义从中检索params的集合的顺序,默认规则和每个调用:-)

玩得开心!