Express 快线中的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: '

我想在我的快车路线上使用VAR。它们工作得很好,但在我在路由中使用变量后,在该变量之后的任何路由都不会工作。这里有一个非常简单的例子

/////////////////////////////////////////////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
  • /绝地武士

  • 如果您在顶部定义路径
    /:planetId
    ,那么它实际上将
    /jedi
    视为同一条路径,其值为param
    planetId=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,你就必须结束这个文件并创建另一个路由文件?