快速路线错误匹配

时间:2016-04-26 15:35:05

标签: node.js express

我已经阅读了有关人们路线不匹配的其他问题,然后订购解决问题的路线。我遇到了这个问题,我的URL路由被视为参数,然后表达不匹配并导致错误的路由。例如这是两条路线:

app.get('/byASIN/LowPrice/:asin/:price',function(req,res){});

app.get('/byASIN/:asin/:price', function(req, res) {});

现在一切正常,但是当我从第一条路线中取出任何参数时,它与下面给出的路线相匹配,这不是我想要的。 如果我点击/byASIN/LowPrice/:asin/:price一切正常,但只要我点击/byASIN/LowPrice/:asin就匹配byASIN/:asin/:price,因此调用错误的函数并崩溃我的服务器。我希望它们明确匹配,如果调用/byASIN/LowPrice/:asin,请回复一些警告,例如你用少一个参数打电话。我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

默认情况下,快递Url参数 optinial,这就是

的原因

app.get('/byASIN/LowPrice/:asin/:price',function(req,res){});

/byASIN/LowPrice/:asin不匹配,因为缺少第二个参数。

但是,您可以通过向其添加? 使参数成为可选参数

app.get('/byASIN/LowPrice/:asin/:price?',function(req,res){});

这可以解决你的问题。

答案 1 :(得分:0)

尝试定义/byASIN/LowPrice/:asin/:price处理的路由,然后使用通配符处理其他所有内容。

app.get('/byASIN/LowPrice/:asin/:price',function(req,res){});

app.get('*',function(req,res){});

答案 2 :(得分:0)

Express按照您插入的顺序匹配路线。如果您首先定义了松散路由,那么express将首先使用该路由作为匹配。一个极端的例子是

app.get('*', function(req, res) {});

如果这被定义为第一条路线,则不会调用其他路线(如果没有调用next())。

如果你想要快递总是首先使用严格的,那么你需要通过在宽松的之前定义严格的路线来改变路线的顺序。

如果在路线中明确支持优先权,那将是很好的,这可能是您的问题的一个很好的解决方案,但不幸的是,这可以通过仅订购来解决:(