有什么方法可以在快递中使用 next() 有条件地跳过中间件?

Bad*_*ach 4 javascript middleware node.js express

所以例如 -

//Functions

var validationCheck = function(req, res, next){
  if(req.session.userId && req.session.token)
      next('validationCatch') //Is this possible to skip middleware if not needed?
  else
      next()
}

var getUserId = function(req, res, next){
  req.session.userId = DB.getUserId
  next()
}

var getToken = function(req, res, next){
  req.session.token = DB.getToken
  next()
}

//a catcher function to direct to next function depending on route
var validationCatch = function(req, res, next){
  next()
}

//Routes

app.get(api + '/feature1', validationCheck, getUserId, getToken, validationCatch, feature1)
app.get(api + '/feature2', validationCheck, getUserId, getToken, validationCatch, feature2)
Run Code Online (Sandbox Code Playgroud)

如果信息已经从以前的路由中缓存,我的目标是跳过不必要的中间件。所以在上面的例子中,feature2 不必输入getUserIdgetToken如果 feature1 已经被调用,从而使响应更快。

如果不可能,请说明一个更有效的架构来处理重复的验证过程。谢谢

Pat*_*ckD 5

不要直接注册回调,只需在validationCheck需要时调用它们。这是一个简单的例子getUserId

var validationCheck = function(req, res, next){
  if(req.session.userId)
      next()
  else {
    getUserId(req, res, function(err){
      next(err)
    })
  }      
}
Run Code Online (Sandbox Code Playgroud)