【问题标题】:Why is default express route not reached?为什么没有到达默认快递路线?
【发布时间】:2018-07-26 11:30:13
【问题描述】:

我已经实现了几条路线,我希望在到达之前快速到达默认路线,如下所示:

app.get('/', function(req,res,next){
  console.log('default route');
  // Do some work
  next('route');
}

不幸的是,这条路线永远无法到达,快车只是路过它。但是,当我稍微改变路线时,它确实匹配,如下所示:

app.get('/:bogus', function(req,res,next){
  ...
  next('route');
}

为什么需要额外的特异性?为什么 express 不总是匹配 '/'?

【问题讨论】:

  • 请提供完整的代码示例和您的期望,以便更清楚地了解您的需求,就像我有这条路线一样,我试图到达这条路线,但它没有发生.. . 中间件中的顺序很重要,因此很难以这种方式回答。
  • @juangarcia,我曾尝试将上述路线放在中间件的最开头和中间件的最后,但没有任何区别。 Quentin 的回答解释了为什么它没有像我预期的那样工作。

标签: javascript express


【解决方案1】:

app.get()处理具体路径,http://localhost:8080/等价于/

/:bogus 用于 URL 参数,当您输入类似以下内容时它是等效的:http://localhost:8080/HelloWorld

app.get('/:bogus', function(req, res){
    //console.log("Value is :"+req.params.bogus);
    res.send("Value is : "+req.params.bogus);
});

最后一行你可以添加这个方法,当你输入一个没有在你的路由中定义的URL时默认调用它

// After all your routes...
//Page Not Found
app.use(function(req, res){
    res.sendStatus(404);
});

【讨论】:

  • 该建议的唯一问题是我正在测试的 url 都在我的路由中定义。我只是想在到达正确的端点之前使用默认路由执行中间人操作。不过,这很高兴知道。从现在开始,出于安全目的,我将一直使用它,谢谢。
【解决方案2】:

/ 不是默认路由。这是/ 的路由,并且只有/(查询字符串除外)。

/:bogus/something 的路由,其中​​“某物”是客户端在请求中放入的任何内容。

【讨论】:

  • 很高兴知道,非常感谢。这完美地回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2017-08-18
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多