如何在 NodeJS 中使用隐式函数参数

How to work with implied function parameters in NodeJS

在我网站的路由文件中,我有这样一个函数:

router.post('/', ctrl1.validate, ctrl2.doSomething)

验证函数如下所示:

function(req,res,next){
   var errors = validator.checkForm('myForm')
   if(errors){
      res.redirect("/")
   }else{
      next()
   }
}

如果除了隐含的 req,res,next 之外,我还想将参数传递给验证器函数(例如我要验证的表单的名称),那是怎么做到的?我在控制器中尝试了 ctrl1.validate(formName)ctrl1.validate(formName, req,res,next)function(formName, req,res,next),但都不起作用。

理想的解决方案是首先根据随请求传递的数据确定您正在处理的表单。你没有展示那是什么,所以我们不知道该推荐什么或者在这种情况下是否可行。

如果您无法做到这一点,并且希望拥有一个可以在多个地方用作请求处理程序的通用函数,并且您希望向它传递一个在您使用的每个不同地方都不同的参数它,那么你需要创建一个函数,returns一个函数

router.post('/', ctrl1.validate("someFormName"), ctrl2.doSomething)

// definition of ctrl1.validate
validate: function(formName) {
   // return a request handler that will knkow which formName to use
   return function(req,res,next){
       var errors = validator.checkForm(formName)
       if(errors){
          res.redirect("/")
       } else {
          next()
       }
    }
}

当您第一次调用此方法时,它 returns 另一个函数是您的实际请求处理程序。然后,该内部函数可以访问请求中的 req, res, next 和最初传入的 formName