在Meteor方法中,为什么this.connection.clientAddress未定义?

时间:2014-06-04 08:07:50

标签: javascript meteor

// on server
Meteor.methods({
  'getIP': function () {
    return this.connection.clientAddress;
  }
});

// on client
Meteor.startup(function() {
  Meteor.call('getIP', function (err, res) {
    console.log(res);  // returns undefined
  });
});

进一步挖掘,服务器上的'this.connection'似乎只有3个东西:id,close,onClose,但不是clientAddress。我错过了什么?

其他信息:

1 个答案:

答案 0 :(得分:2)

我使用Meteor 0.9.3.1并在Meteor方法中调用this.connection.clientAddress对我有用。我将客户端IP地址存储为我正在使用的收藏集中的字段。

我确实有一个问题,客户端正在尝试模拟调用并抛出Exception while simulating the effect of invoking... this.connection is undefined错误。但我发现我的文档正确存储了正确的客户端IP地址。所以解决方法是让客户尝试模拟这个。

在我的Meteor方法中,我刚刚添加了Meteor.isServer项检查。如果客户端模拟客户端IP为0.0.0.0

,则无关紧要
var ip = "0.0.0.0";

if(Meteor.isServer) {
    if(!this.connection.clientAddress)
       throw new Meteor.Error(403, "Server Error: You must be connected.");
    else
       ip = this.connection.clientAddress;
}

//  ...store document with ip...

一切都按预期运作。