Node.js 快线错配

Node.js 快线错配,node.js,express,Node.js,Express,我读过其他关于人们路线不匹配的问题,然后对路线进行排序来解决问题。我遇到了这样一个问题,我的URL路由被视为一个参数,然后表示不匹配并导致错误的路由。e、 g.以下是两条路线: app.get('/byASIN/LowPrice/:asin/:price',function(req,res){}); 及 现在一切正常,但只要我从第一条路径中取出任何参数,它就会与下面给出的路径匹配,这不是我想要的。 如果我点击/byASIN/LowPrice/:asin/:price一切正常,但只要我点击/by

我读过其他关于人们路线不匹配的问题,然后对路线进行排序来解决问题。我遇到了这样一个问题,我的URL路由被视为一个参数,然后表示不匹配并导致错误的路由。e、 g.以下是两条路线:

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

现在一切正常,但只要我从第一条路径中取出任何参数,它就会与下面给出的路径匹配,这不是我想要的。
如果我点击
/byASIN/LowPrice/:asin/:price
一切正常,但只要我点击
/byASIN/LowPrice/:asin
它就会匹配
byASIN/:asin/:price
,因此调用错误的函数并使我的服务器崩溃。我想让它们显式匹配,如果调用了
/byASIN/LowPrice/:asin
,则用一些警告进行响应,例如,您调用的参数少了一个。我在这里遗漏了什么?

默认情况下,express Url参数是而不是optinial,这就是原因

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

不匹配,因为缺少第二个参数

但是,您可以通过添加一个
,使参数成为可选的

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


这应该可以解决您的问题。

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

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

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

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

app.get('*', function(req, res) {});
如果将其定义为第一个路由,则不会调用其他路由(如果未调用next())

如果希望express始终首先使用严格路由,则需要先定义严格路由,再定义松散路由,从而更改路由的顺序


如果在路线中明确支持优先级,这将是一个很好的解决方案,但在此之前,不幸的是,这只能通过订购来解决:(

我不想让它成为可选的,我只是希望路由器严格匹配。IMO
/byASIN/LowPrice/
/byASIN/:asin/
不同,我希望匹配是严格的,如果缺少参数,则发出警告,指出该参数丢失,而不是让它移动到下一个完全不同的路由上我不明白这一点。就像
byASIN/:asin/:price
一样,我还有很多其他的路径可以匹配。我想它要做的是,首先检查顶部的路径是否匹配,即使
/LowPrice/:asin
匹配,但是参数的数量不匹配,所以它会移动到
byASIN/:asin/:price
,因为它需要
/LowPric>e
也作为一个参数,因此总共有3个参数是错误的
app.get('*', function(req, res) {});