我是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/后面跟着任何东西。由于"标题"一词属于"任何东西"的广义子集,你永远不会走第二条路。
相反,换一种方式首先会有更具体的路线。
希望这是有道理的!