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