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

时间:2015-03-30 09:49:10

标签: node.js meteor routing routes iron-router

我是Meteor和铁路由器的新人。

我需要这两条路线:

/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' });

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

我希望任何覆盖解决方案都覆盖第一条路线。

我在铁路由器文档中找不到任何相关内容。

修改

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

1 个答案:

答案 0 :(得分:1)

我认为你只需要首先声明更具体的路线,即/ 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 /后跟任何东西。由于“标题”一词属于“任何事物”的广泛子集,因此您永远不会进入第二条路线。

相反,反过来说,首先要有更具体的路线。

希望有意义!