【问题标题】:Match all routes but '/' in Express匹配 Express 中除 '/' 之外的所有路由
【发布时间】:2016-11-12 18:32:21
【问题描述】:

我正在尝试通过检查 cookie 为我的应用创建身份验证机制。所以我添加了router.all('*') 来匹配每个请求,检查cookie,然后转到实际的处理程序。但我需要它只匹配在“/”之后有一个或多个字符的请求。 (我想匹配/manage/m/about,但不是/)。

//Assuming a request for '/', this gets called first
router.all('*', function (request, response, next) {
    //Stuff happening
    next();
});

//This gets called on next(), which I do not want
router.get('/', function (request, response) {
    //Stuff happening
});

//However this I do want to be matched when requested and therefore called after router.all()
router.post('/about', function (request, response) {
    //Stuff happening
});

根据答案here,您可以使用正则表达式进行路径匹配,但我真的不明白'*' 是什么。它可能匹配所有内容,但对我来说看起来不像正则表达式。

  1. 为什么'*' 匹配/
  2. 我需要向all() 提供什么参数才能匹配/about 而不是/

【问题讨论】:

    标签: javascript regex node.js express


    【解决方案1】:

    简单地把*放在最后。路由器按定义顺序检查。

    所以:

    router.get('/' ...
    

    然后

    router.all('*' ...
    

    请记住/* 仍然有效,因此来自/next() 调用将触发捕获所有过程。

    【讨论】:

    • 有时解决问题的方法不是问题的答案,而是问题的解决方案。
    【解决方案2】:

    仅包含星号 ('*') 的路径表示“匹配任何内容”,其中仅包含主机名。

    为了只“匹配某些东西”,请使用带加号运算符的点组,这意味着“至少匹配任何东西”。

    router.all(/\/^.+$/, () => {
      // ...
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2020-12-29
      • 2011-12-03
      • 2019-07-20
      • 2020-07-23
      • 2016-01-02
      • 1970-01-01
      相关资源
      最近更新 更多