Iron-Router:onBeforeAction() - > .next()不是函数

时间:2015-08-27 11:44:33

标签: javascript node.js meteor iron-router

我的流星应用程序出了问题,我不知道为什么。

我的meteor版本是 1.1.0.3 ,这是我的软件包列表:

select TOP 1 p.ProductID
from EcomGroupProductRelation pr join
     EcomProducts p
     on p.ProductID = pr.GroupProductRelationProductID
where p.ProductActive = 1 and
      pr.GroupProductRelationSorting < (select GroupProductRelationSorting
                                        from EcomGroupProductRelation pr2
                                        where pr2.GroupProductRelationProductID = 7
                                       )
order by pr.GroupProductRelationSorting desc;

好吧......现在我们谈谈我的问题。我想为那些没有“管理员”角色的用户保护一些路由,这些路由可以找到。系统会检查我的角色,但它们不会渲染视图。

控制台错误消息

accounts-password        1.1.1  Password support for accounts
alanning:roles           1.2.13  Role-based authorization
chrismbeckett:toastr     2.1.2_1  Gnome / Growl type non-blocking notifications
coffeescript             1.0.6  Javascript dialect with fewer braces and semi...
email                    1.0.6  Send email messages
fortawesome:fontawesome  4.4.0  Font Awesome (official): 500+ scalable vector...
fourseven:scss           3.2.0  Style with attitude. Sass and SCSS support fo...
insecure                 1.0.3  Allow all database writes by default
iron:router              1.0.9  Routing specifically designed for Meteor
jquery                   1.11.3_2  Manipulate the DOM using CSS selectors
meteor-platform          1.2.2  Include a standard set of Meteor packages in ...

应用/ LIB /控制器/ admin_controller.js

Exception in delivering result of invoking 'accounts/hasAdminRole': TypeError: me.next is not a function
    at http://localhost:3000/lib/controllers/admin_controller.js?843e8c9edbf0891b773aa63a9ad004d1afcbfb19:28:9
    at Meteor.bindEnvironment [as _callback] (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:983:22)
    at _.extend._maybeInvokeCallback (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:3860:12)
    at _.extend.receiveResult (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:3880:10)
    at _.extend._livedata_result (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4970:9)
    at onMessage (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:3725:12)
    at http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:2717:11
    at Array.forEach (native)
    at Function._.each._.forEach (http://localhost:3000/packages/underscore.js?0a80a8623e1b40b5df5a05582f288ddd586eaa18:156:11)
    at _.extend._launchConnection.self.socket.onmessage (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:2716:11)

应用/服务器/ methods.js

onBeforeAction: function () {
    var me = this;
    if(!Meteor.userId()) {
        Router.go('signin');
    } else {
        Meteor.call('accounts/hasAdminRole', function(err, r) {
            if(!err && r) {
                console.log('success');
                console.log(me);
                me.next()
            } else {
                toastr.error('Not Authorized.', 'Error!');
                Router.go('home');
            }
        });
    }
},

感谢您的回答!

1 个答案:

答案 0 :(得分:1)

您可以直接在this.next变量中存储me函数,并将其调用为:

onBeforeAction: function () {
    var me = this.next;
    if(!Meteor.userId()) {
        Router.go('signin');
    } else {
        Meteor.call('accounts/hasAdminRole', function(err, r) {
            if(!err && r) {
                console.log('success');
                me();
            } else {
                toastr.error('Not Authorized.', 'Error!');
                Router.go('home');
            }
        });
    }
},