Meteor v 1.0 and Iron:Router
Asked Answered
E

1

20

Is anyone else getting the following error from Iron-Router since upgrading Meteor to version 1.0?

Please post here if you know how to resolve this issue.

Route dispatch never rendered. Did you forget to call this.next() in an onBeforeAction?

Router.map(function () {
    Router.route('profileShow', {

        waitOn: function () {
            if (Meteor.user()) {
                Meteor.subscribe('userData');
            } else {
                this.next();
            }
        },

        data: function () {
            if (Meteor.user()) {
                return {profile: Meteor.user().profile};
            }
        }
    });
});
Emersion answered 29/10, 2014 at 12:2 Comment(0)
C
29

There was a non backwards-compatible change in the newest version of Iron Router. The migration guide says:

onRun and onBeforeAction hooks now require you to call this.next(), and no longer take a pause() argument. So the default behaviour is reversed. For example, if you had:

Router.onBeforeAction(function(pause) {
  if (! Meteor.userId()) {
    this.render('login');
    pause();
  }
});

You'll need to update it to

Router.onBeforeAction(function() {
  if (! Meteor.userId()) {
    this.render('login');
  } else {
    this.next();
  }
});

More information

In your case, the by-the-book fix would be to add this.next() at the end of onBeforeAction. However, you should rather use waitOn:

waitOn: function () {
  return Meteor.subscribe("userData");
}

That way, you can set a loadingTemplate which will appear while the userData subscription is loading.

Comyns answered 29/10, 2014 at 12:14 Comment(1)
Just to add that it may be an onRun causing the error even if the message says it was an onBeforeAction. The error message could be better.Bair

© 2022 - 2024 — McMap. All rights reserved.