Search code examples
meteoriron-router

Iron Router BaseController undefined when deployed?


My app runs fine locally, but when I deploy it on xxxx.meteor.com, I'm getting the Iron Router "Organize your Meteor application" splash page. Additionally, once the browser hits the first Basecontroller.extend({, I get a ref. error that "BaseController is not defined". Maybe something to do with the load order of the route controller specific to deployment? This is my code:

client/main/routes.js

Router.route('/', {
    name: 'splash',
    controller: 'SplashController'
});

Router.route('/login', {
    name: 'login',
    controller: 'LoginController'
});

Router.route('/home', {
    name: 'home',
    controller: 'HomeController'

//...etc

client/main/controller.js

BaseController = RouteController.extend({
    layoutTemplate: 'layout',
    requiresAuth: false,
    publicOnly: false,
    // Called before anything happens
    onBeforeAction: function () {
        if (!Meteor.userId() && this.requiresAuth) {
            return this.redirect('/login');
        }
        if (Meteor.userId() && this.publicOnly) {
            return this.redirect('/home');
        }
    }
});

client/(all templates)/controller.js

TemplateController = BaseController.extend({
    requiresAuth: false,
    publicOnly: true,
    action: function () {
        this.render('template', {
            to: 'content'
        });
    }
});

Solution

  • The issue belong in loading only. So, code which should always load first, try put inside <app-root>\lib directory.

    Like your case, put route.js and controller.js inside lib directory.

    Read more about loading order in meteor - http://docs.meteor.com/#/full/structuringyourapp