2016-11-25 4 views
0

この流行コードは、ユーザによって入力されたフィールドplateNumの一致値を持つ1つのドキュメントを発行する必要があります。
何も返されないのはなぜですか?それを修正するには?メテオセキュアサブスクライブ&パブリッシュ

//server.publications.js

Meteor.publish('myCol', function (plate) { 
    if (this.userId && plate) { 
    return myCol.find({plateNum: plate}, {fields: {a: 1, b: 1, c: 1, engineSize: 1 }}); 
    } 
}); 

フィールド「A」、「B」、「C」の値は、ユーザ要求時に準備ができていないかもしれないが、によって計算されますバックエンドの労働者と私は一度にあなたのクライアントコードがthis.userIdmyColに加入しているため、それがあると思いmyCol

//client.main.js

Meteor.subscribe('myCol', dict.get('plateNum')); //<== stored info from user 

Template.footer.events({ 
    'click #info':() => { 
    searching = '<span class="note">Searching...</span>'; 
    let plate = document.getElementById('plateNum').value; 
    plate = plate.replace(/\W/g, '').toLowerCase().trim(); // 
    dict.set('plateNum', plate); //<=== store user info here 

    let doc = myCol.findOne({plateNum: plate}); 
    if (!doc || !doc.a) Meteor.call('aaa', plate); 
    if (doc && !doc.b) Meteor.call('bbb', {plateNum: plate},() => {}); 
    if (doc && doc.c && !doc.c) Meteor.call('ccc', {plateNum: plate},() => {}); 
    } 
}); 

答えて

0

を更新したがって、サーバーによって何も返されません。あなたは必ず、ユーザが前subscribe

に認証されているようにする必要があり、この問題を解決するには

更新

これは、あなたがそれを修正するために使用できるコードです:

Template.footer.onCreated(function() { 
    // use this.autorun over Tracker.autorun 
    // so that the code below will be clear on onDestroy event 
    this.autorun(function() { 
    if(Meteor.userId()) { 
     Meteor.subscribe('myCol', dict.get('plateNum')); 
    } 
    }); 
}); 
+0

そして、何コード提案はこれを行うことを提案できますか? –

+0

ちょっと答えが更新されました。不明なことがあればコメントして説明します – Khang

関連する問題