2016-11-25 119 views
0

这个流星代码需要发布一个文件,其中包含字段plateNum由用户输入的匹配值。
为什么它不返回任何东西?如何解决它?流星安全订阅和发布

//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”可能不准备在用户请求的时间,但将通过下式计算后端工人和更新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

我想这是因为当时你的客户端代码订阅myColthis.userId为空,因此服务器不返回任何内容。

要解决这个问题,你需要确保用户已经通过认证之前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