Express 快线中的VAR正在阻止任何后续路线
我想在我的快车路线上使用VAR。它们工作得很好,但在我在路由中使用变量后,在该变量之后的任何路由都不会工作。这里有一个非常简单的例子Express 快线中的VAR正在阻止任何后续路线,express,parameters,routes,Express,Parameters,Routes,我想在我的快车路线上使用VAR。它们工作得很好,但在我在路由中使用变量后,在该变量之后的任何路由都不会工作。这里有一个非常简单的例子 /////////////////////////////////////////////planets router.get('/:planetID', function(req, res, next) { if(req.params.planetID == "hoth"){ res.render('index', { title: '
/////////////////////////////////////////////planets
router.get('/:planetID', function(req, res, next) {
if(req.params.planetID == "hoth"){
res.render('index', {
title: 'Hoth',
subtitle:"Damn its cold"
});
}
});
////////////////////////////////////////////////jedi
router.get('/jedi', function(req, res, next) {
res.render('characters', {
title: 'Jedi',
subtitle:"why the f is this happening?",
});
});
在本例中,绝地路线
不渲染任何内容。但是如果我把绝地之路放在行星之路之前,一切都正常。以前有人遇到过这种情况吗?
非常感谢您的帮助 快速路由在管道中工作,这意味着它将首先检查第一条路由,并查看它是否接受参数,并且看不到“/23423”和“/jedi”之间的任何差异。它假设绝地也是身份证。你应该在它前面加上前缀
/planet/:planetID
让他们不要互相冲突 Express用于匹配路由路径;有关定义管线路径的所有可能性,请参见其文档。除此之外,在使用express中间件时,一定要注意定义的中间件顺序
注意:路由器也是Express中的中间件
因此,您使用的是两条路线:
如果您在顶部定义路径
/:planetId
,那么它实际上将/jedi
视为同一条路径,其值为paramplanetId=jedi
,而如果您放置第二条路径,即:<代码>/jedi在顶部,然后它进入精确匹配条件,如果它找到/jedi
,则只执行相应的操作,否则它将尝试定义其他路径。啊,好的,scopsy,现在我看到你的/23423示例是如何应用的。对不起,伙计们,我没有发布足够的信息,我意识到。我必须使用if()语句告诉路由,如果它没有找到匹配项,就继续前进。我使用next()函数和一个计数器变量来实现这一点
router.get('/:planetID', function(req, res, next) {
var counter = 0;
planetJSON.planets.forEach(function(item){
counter++;
if(item.link == req.params.planetID){
planetDisplay.name = item.name;
planetDisplay.text = item.text;
planetDisplay.image = item.image;
res.render('index', {
planetGrab:planetDisplay,
planetList:planetJSON
});
}//end if()
else if(counter + 1 > planetJSON.planets.length){
next();
}
});//end for each()
});//end router.get
再次感谢您的帮助我完全同意@scopsy的回答。我想补充更多的细节,这样他就能理解背后的原因。嘿,谢谢你们。事实上,我认为“/planet/:planetID”是一个不错的选择,但这给了我“/planet/绝地”。至于订单,它就是这样运作的吗?一旦你有了一个var,你就必须结束这个文件并创建另一个路由文件?