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

标签 javascript node.js express middleware

例如-

//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)

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

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

最佳答案

与其直接注册回调,不如在需要时在 validationCheck 中调用它们。 这是一个使用 getUserId 的简单示例:

var validationCheck = function(req, res, next){
  if(req.session.userId)
      next()
  else {
    getUserId(req, res, function(err){
      next(err)
    })
  }      
}

关于javascript - 有什么方法可以在 express 中使用 next() 有条件地跳过中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33192299/

相关文章:

javascript - 如何将JavaScript(UnityScript)转换为C#并实现低通滤波器?

javascript - Node.js async.each - "callback was already called"

html - 在 html 到 PDF 中将框内容与底部对齐 - 没有 flexbox

javascript - 需要 Node 编译脚本中的普通 javascript 文件吗?

javascript - Node.js Express、路由器、可选参数作为扩展

node.js - ExpressJS,使用两个也互相使用的路由器进行路由处理?

javascript - 如果我将其放入 js 文件夹中,功能将无法正常工作

javascript - 将这两个值传递给 CSS 中的变量

javascript - 测试与 Jasmine 异步的 requireJS 方法

javascript - SQL 到 Mongo 事务架构