iron路由器在流星中使用相同的根路径进行路由



我是Meteor和iron路由器的新手。

我需要这两条路线:

/movie/:title
&
/movie/title?q=queryText

这是我的路线代码(/server/myRoute.js):

// http://localhost:3000/movie/MovieTitleHere
// Result Output: Route 1 (correct)
Router.route('/movie/:title', function() {
    var res = this.response;
    res.end("Route 1");
}, { where: 'server' });
// http://localhost:3000/movie/title?q=queryText
// Result Output: Route 1 (incorrect)
Router.route('/movie/title', function() {
    var res = this.response;
    var query = this.params.query;
    var searchQuery = query.q;
    res.end("Route 2" + searchQuery);
}, { where: 'server' });

但总是第一路开火,怎么设置这个??

我希望任何替代解决方案都能替代第一条路线。

我在iron路由器文档中没有找到任何关于这方面的信息。

编辑:

@Tom解决方案是可以的,但如果我想将这两条路线组织在两个单独的文件中,该怎么办?(例如route1.js和route2.js)

我认为您只需要首先声明更具体的路线,即/imovie/title/:title

把它放在你的代码的第一位,你应该会很好。

作为对您编辑的回应,您的代码应该是另一种方式,我相信:

// http://localhost:3000/movie/title?q=queryText
// Result Output: Route 1 (incorrect)
Router.route('/movie/title', function() {
  var res = this.response;
  var query = this.params.query;
  var searchQuery = query.q;
  res.end("Route 2" + searchQuery);
}, { where: 'server' });
// http://localhost:3000/movie/MovieTitleHere
// Result Output: Route 1 (correct)
Router.route('/movie/:title', function() {
  var res = this.response;
  res.end("Route 1");
}, { where: 'server' });

正如你所写的,/mevie/:title表示匹配/mevie/后面跟着任何东西。由于"标题"一词属于"任何东西"的广义子集,你永远不会走第二条路。

相反,换一种方式首先会有更具体的路线。

希望这是有道理的!

最新更新