this.next() error in Meteor Iron Router

this.next() error in Meteor Iron Router

本文关键字:Meteor Iron Router in error next this      更新时间:2023-09-26

在Meteor中出现奇怪的错误:

路由调度从未呈现。你忘记在onBeforeAction中调用this.next()了吗?

,没有任何内容正在呈现。我该如何解决这个问题?非常感谢任何帮助。

这是我的router.js

Router.configure({
    layoutTemplate: 'layout',
});
Router.route('/', function() {
    this.render('home');
});
Router.route('/user/:_username', {
  name: 'user_profile',
  data: function() { return Meteor.user();} 
});
Router.route('/create', function() {
  this.render('create_event');
});
Router.route('/events/:name', {
  name: 'event',
  data: function() { return Events.findOne({name: this.params.name});}
});

Router.route('/useremail', function() {
    this.render('userEmail');
}, {
    name: 'userEmail'
});
Router._filters = {
  hasCompletedProfile: function() {
    if(!this.ready()) return;
    var user = Meteor.user();
    if (user && ! userProfileComplete(user)){
      this.render('userEmail');
    } else {
      this.next();
    }
  },
};
filters = Router._filters;
Router.onBeforeAction(filters.hasCompletedProfile);

确保您总是在Router._filters方法中调用this.next();,而不仅仅是在一个条件下。

试着用这个代替你的Router._filters方法:

Router._filters = {
  hasCompletedProfile: function() {
    if(!this.ready()) return;
    var user = Meteor.user();
    if (user && ! userProfileComplete(user)){
      this.render('userEmail');
    }
    this.next();  // Take note, it is no longer in an else statement
  },
};