2015-06-14 49 views
3

I20150615-07:11:17.859(9)? Exception from sub draftsList id GghnkQkdjNSTyHuQs Error: Match error: Expected object, got undefined I20150615-07:11:17.859(9)? at checkSubtree (packages/check/match.js:275:1) I20150615-07:11:17.859(9)? at check (packages/check/match.js:32:1) I20150615-07:11:17.859(9)? at [object Object].Meteor.publish.Meteor.users.find.userId [as _handler] (app/server/publications.js:44:3) I20150615-07:11:17.859(9)? at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1617:1) I20150615-07:11:17.859(9)? at [object Object]._.extend._runHandler (packages/ddp/livedata_server.js:950:1) I20150615-07:11:17.859(9)?
at [object Object]._.extend._startSubscription (packages/ddp/livedata_server.js:769:1) I20150615-07:11:17.859(9)?
at [object Object]._.extend.protocol_handlers.sub (packages/ddp/livedata_server.js:582:1) I20150615-07:11:17.859(9)?
at packages/ddp/livedata_server.js:546:1 I20150615-07:11:17.860(9)? Sanitized and reported to the client as: Match failed [400]流星JS - 從子id(ID不存在)的例外

我正在一個流星項目,我在我的終端上得到這個奇怪的錯誤。

問題是當它說Exception from sub draftsList id GghnkQkdjNSTyHuQs Error: Match error: Expected object, got undefined,id始終在頁面刷新上發生變化,並且不在我的數據庫中(無處可見)。

的事情是,一切正常,發現..

這是我publication-subscription

出版

Meteor.publish('draftsList', function (options) { 
    check(this.userId, String); 
    check(options, { 
    limit: Number 
    }); 

    var drafts = Drafts.find({'user._id': this.userId}, options); 

    return drafts; 
}); 

認購

Router.route('/posts/:_id', { 
    name: 'postPage', 
    // limit: function() { 
    // return 
    // } 
    subscriptions: function() { 
    return [ 
     Meteor.subscribe('singlePost', this.params._id), 
     Meteor.subscribe('userStatus'), 
     Meteor.subscribe('draftsList'), 
     Meteor.subscribe('draftsList', { 
     limit: Number(Session.get('draftsLimit')) 
     }), 
     Meteor.subscribe('comments', { 
      postId: this.params._id 
     }, { 
      limit: Number(Session.get('commentLimit')) 
     }), 
     Meteor.subscribe('answers', { 
      postId: this.params._id 
     }, { 
      limit: Number(Session.get('answerLimit')) 
     }) 
    ]; 
    }, 
    data: function() { 
    return Posts.findOne({_id:this.params._id}); 
    }, 
}); 

回答

1

您在路線中兩次訂閱draftsList。第一次訂閱沒有任何參數,這將使optionsundefined而不是一個對象。只要刪除第一次訂閱,問題就會消失。

另請注意,使用check代替this.userId可能會發生這種情況,但如果您在路由中使用waitOn,則可能會導致問題。普遍接受的模式是在需要經過身份驗證的客戶端的發佈者中,當this.userIdundefined時,返回[]this.ready()

0

嘗試在您的出版物中刪除您的checkthis.userId,您不需要檢查此屬性的有效性,因爲Meteor已經爲您執行此操作。

Meteor.publish('draftsList', function (options) { 
    check(options, { 
    limit: Number 
    }); 
    var drafts = Drafts.find(this.userId, options); 
    return drafts; 
});