流星中具有相同根路径的铁路由器路由
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' 的广泛子集,您永远不会到达第二条路线。
反之,更具体的路线优先。
希望这是有道理的!
我是 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' 的广泛子集,您永远不会到达第二条路线。
反之,更具体的路线优先。
希望这是有道理的!