Meteor:从外部API发布数据并将相同的数据插入到数据库

时间:2016-02-10 15:39:14

标签: meteor

我有一个要求,我需要从外部API发布数据,然后将该数据也插入到MongoDB中。到目前为止,我已经实现的是从外部API获取数据并插入到数据库并发布相同的日期工作正常,但用户可以看到此实现中的延迟。

要求是在选择下拉列表中的值时调用外部API,并在templateName模板中发布相同的数据并将其插入到后台的数据库中。

如何发布来自外部API的数据并插入相同的数据?我在事件函数中使用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"} );
      });
   });

1 个答案:

答案 0 :(得分:2)

请注意,调用外部API的人是server。为什么要将响应从服务器发送到客户端,然后将响应从客户端插入到服务器到数据库?这就是你发现延迟的原因。

服务器获得响应后,将响应速度快得多,然后将响应插入数据库

这将插入对DB的响应:

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

对客户的回应:

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')
    }
});

您无需订阅。数据已通过方法调用在客户端,并通过Session.get()传递给templateName。如果你使用subscribe,那么到达客户端会慢得多,而且效率低的双倍数据