如何在NodeJS中使用隐含的函数参数

时间:2018-02-17 01:34:46

标签: node.js express routing middleware express-router

在我网站的路线文件中,我有一个这样的功能:

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),但都没有工作。

1 个答案:

答案 0 :(得分:0)

理想的解决方案是首先从通过请求传递的数据中确定您正在处理的形式。你没有显示那是什么,所以我们不知道究竟推荐什么,或者在这种情况下是否可行。

如果你不能这样做,并希望有一个泛型函数,你可以在多个地方用作请求处理程序,并且你想要将一个参数传递给它,在你使用它的每个不同的地方都是不同的,那么你需要创建一个返回函数的函数

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()
       }
    }
}

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