【问题标题】:How to dynamically decide if a request should go thru a middleware in Express如何动态决定请求是否应该通过 Express 中的中间件
【发布时间】:2015-12-16 23:51:23
【问题描述】:

全部:

我是 Epxress 的新手,我构建了一个中间件来检查用户凭据,我将其指定为:

var check = function(req, res, next){/* checking user cred*/}

我会这样使用它:

app.use(check);

或者喜欢:

app.get("some url", check, function(req, res, next){})

但是只有一件事让我感到困惑,有时,我需要跳过检查在同一个处理程序中取决于 req.query,我想知道是否有一种方法(或设计模式)可以在不指定的情况下执行此操作检查中间件中的条件检查(我只想使检查模块化并专注于其业务逻辑)?

谢谢

【问题讨论】:

  • 您是说要避免在检查中间件中进行条件检查吗?
  • @markthethomas 是的,这就是我想要的

标签: node.js express middleware


【解决方案1】:

如果您希望将检查中间件模块化以便可以在其他地方使用它,您可以很容易地包含某种标志来检查 req.query 参数或您想要检查的任何其他内容并使其更多通用:

function(req, res, next){
  if(!req.query){
  //   do some kind of check
  } else {
  // do a check with req.query
  }
}

这是否符合您想要做的事情?

【讨论】:

    【解决方案2】:

    对于身份验证,一个典型的模式是拥有一组允许匿名访问的路由,以及一个需要身份验证的部分,从而调用您的中间件。

    此外,请查看 Passport 库以了解您的身份验证问题,它与 express 集成得非常好。

    【讨论】:

    • 谢谢,之前试过passport,但是当时觉得有点难理解,所以改用Web Token方式,这次我再试试。
    • 对于希望弄清楚如何使用 JWT 的未来用户,我认为接受的答案不应该是“改用护照”:)
    • 发帖人没有明确说明他的技术选择。我确信有一个不涉及手动滚动您自己的身份验证的 JWT 模式或库:)。此外,如果应用结构正确,则不需要有条件地应用身份验证中间件。
    • 此外,npm 上的 Passport 似乎有几种 JWT 策略
    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2017-06-16
    • 2012-03-02
    • 2021-04-22
    相关资源
    最近更新 更多