TJR
TJR

Reputation: 6577

iron:router wildcard path generating seems to be broken

When you create a wildcard URL in iron:router for meteor the pathFor Template helper but also Router.go and Router.routes[routeName].path() seems to be broken.

This is our route:

Router.route('/:urlQuery*', function(){
  this.render('ourTemplate');
}, {
  name : 'ourRoute',
});

To accessing a generated url to this we tried the following:

Router.go('ourRoute', {urlQuery : 'test'});
Router.go('ourRoute', {urlQuery : ['test']});
Router.go('ourRoute', {urlQuery : null});
Router.go('ourRoute', {urlQuery : false});

Router.routes.ourRoute.path({urlQuery : 'test'});
Router.routes.ourRoute.path({urlQuery : ['test']});
Router.routes.ourRoute.path({urlQuery : null});
Router.routes.ourRoute.path({urlQuery : false});

And - of course - also we tried the {{pathFor}} Template-Helper.

Every of these lines of code throw the same errors:

Uncaught Error: You are trying to access a wild card parameter at index 0 but the value of params at that index is undefined

I did not find any reference in the iron:router guide so my question is: How to generate a URL in iron:router with a wildcard as parameter ?

Upvotes: 3

Views: 465

Answers (1)

FloatingCoder
FloatingCoder

Reputation: 1724

Looks like Iron Router is using path-to-regexp but the format is a little different when used in Iron Router and not very clear. Try this...

Router.route('/:urlQuery(.*)', function(){

The (.) will tell it to take the param name, and repeat it 0 or more times. Just urlQuery is breaking the name I think, and making it part of the regex. Now if you want to pass an array of mulitple objects to Router.go, you will have another issue...

Router.go("our.route", {urlquery: ['test', 'another']});

Produces a URL that looks like this...

http://localhost:3000/test%2Canother

but that's a different issue I don't have an answer for yet. Perhaps for sending multiple's in Router.go, a better way would be to concat them yourself. Looks like iron router and path-to-regexp are not fully integrated yet?

Upvotes: 2

Related Questions