METEOR:无法存储来自外部API的数据

时间:2015-10-25 09:28:26

标签: javascript meteor

我需要存储注册用户的IP数据。我在插入新注册用户后使用telize api检索IP和collection hooks进行更新。

服务器/ methods.js

Meteor.methods({
  // The method expects a valid IPv4 address
  'geoIp': function () {
    // Construct the API URL
    this.unblock();
    var apiUrl = 'http://www.telize.com/geoip/';
    // query the API
    var response = HTTP.get(apiUrl);
    Meteor.users.update(
          {_id: this.userId}, 
          {$set: {ipdata: response}}
      )
  }
});

LIB / schemas.js

  ipdata: {
    type: Object,
    optional: true
  }

服务器/ hooks.js

Meteor.users.after.insert(function (userId, doc) {
  Meteor.call('geoIp');
});

这些代码没有错误,成功注册新用户,但无法存储ipdata

任何人都弄明白我的代码有什么问题?

非常感谢你..

1 个答案:

答案 0 :(得分:0)

我很确定在这种情况下没有设置this.userId。你在服务器端调用Meteor.call()而不是从另一个方法的主体调用,所以被调用的方法没有上下文。

相反,你可能想要一个常规功能。 E.g。

addGeoIp = function(userId, ip){
    var response = HTTP.get(apiUrl);
    Meteor.users.update(userId, {$set: {ipdata: response}});
}

Meteor.users.after.insert(function (userId, doc) {
    addGeoIp(userId, ip);
});

另外,正如Mark所说,http://www.telize.com/geoip/本身只会返回服务器的IP,而不是客户端的IP。因此,您需要将客户端的IP传递给API以获取位置。