流星中具有相同根路径的铁路由器路由

iron-router routes with same root path in meteor

我是 Meteor 和 iron-router 的新手。

我需要这两条路线:

/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-router 文档中没有找到任何相关信息。

编辑:

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

我想你只需要先声明更具体的路线,即/movie/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' });

如您所写,/movie/:title 表示匹配 /movie/ 后跟任何内容。由于单词 'title' 属于 'anything' 的广泛子集,您永远不会到达第二条路线。

反之,更具体的路线优先。

希望这是有道理的!