我是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)
答案 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 /后跟任何东西。由于“标题”一词属于“任何事物”的广泛子集,因此您永远不会进入第二条路线。
相反,反过来说,首先要有更具体的路线。希望有意义!