2016-02-10 30 views
2

我有一個要求,我需要從外部API公佈的數據,然後插入數據的MongoDB爲好。截至目前我已經實現了從外部API獲取數據並插入到數據庫中,併發布了相同的日期,但工作正常,但用戶可以在此實現中看到延遲。流星:從外部API發佈的數據和相同的數據插入到數據庫

要求調用外部API選擇從下拉列表中值時,並在TEMPLATENAME模板發佈同樣的數據,並將其插入到DB的背景。

如何發佈是來自外部API的數據,並插入相同的?我正在使用Events函數中的Meteor.call和調用服務器方法。

<template name="category"> 
    <select id="category"> 
    <option disabled="disabled" selected="selected">Please Select</option> 
    {{#each categories}} 
     <option value="{{V}}">{{V}}</option> 
    {{/each}} 
    </select> 
</template> 

<template name="templateName"> 
    {{a}} 
    {{b}} 
</template> 

Template.category.events({ 
    "change #category": function (event, template) { 
     var cat = $(event.currentTarget).val(); 
     Meteor.call('serverMethod',cat, function(err, response) { 
     Collections.insert(response.data); 
     BlazeLayout.render('MainContainer',{main: "templateName"}); 
     }); 
    }); 

回答

2

請注意,致電外部API的人是server。爲什麼你將響應從服務器發送到客戶端,然後將客戶端到服務器的響應插入數據庫?這是你找到延遲的原因。

它會快得多該服務器獲得響應後,再插入到數據庫

響應

這將插入迴應DB:

Template.category.events({ 
"change #category": function (event, template) { 
    var cat = $(event.currentTarget).val(); 
    Meteor.call('serverMethod',cat, function(err, response) { 
     Session.set('apiData', response.data) 
     BlazeLayout.render('MainContainer',{main: "templateName"}); 
    }); 
    } 
}); 



Template.templateName.helpers({ 
    apiData: function() { 
     return Session.get('apiData') 
    } 
}); 

:在客戶端

Meteor.methods({ 
    methodName: function() { 
     var response = HTTP.call(method, url, options, asyncCallback); 
     if (response) { 
      Collections.insert(response.data); 
     } 
     return response 
    } 
}); 

響應你不需要訂閱。數據已經在客戶端通過方法調用並通過Session.get()傳遞給templateName。如果您在使用訂閱,它會慢得多,在客戶端和雙數據這是低效的到來

+0

但是爲什麼Session.get(「apidata」)在CATERGORY助手返回?不應該在templateName助手中。? Catergory是下拉模板名稱。還有一件事,無論數據已插入,我已經發布和訂閱,截至目前..我不必再做那些儀式? –

+0

是模板名稱。我已經編輯它。你不需要訂閱。數據已經在客戶端通過方法調用。並通過'Session.get傳遞數據()' – asingh

+0

嗨,你的代碼工作得非常好,我還有一個疑問,我想澄清,我有一個更新的分類下拉列表中的服務器多了一個方法,現在我我是通過點擊按鈕來完成的,但是我想要移除該按鈕並在每一個固定的時間間隔上調用我的應用程序的Load方法。我怎麼做 ?非常感謝... –

相關問題