如何在路由中获取客户端IP

时间:2020-06-08 12:30:43

标签: meteor iron-router

我正在尝试在Iron Router的路由过程中检索客户的IP地址。我有一个用于此(getIP)的服务器端函数,但是路由内的“ waitOn”函数不会等待服务器函数返回:

waitOn: function () {
        Meteor.call('getIP', function(error, clientIp){...}}

我可以强迫它等待,还是可以其他方式获得IP?

1 个答案:

答案 0 :(得分:0)

根据文档,waitOn挂钩必须返回Handler,函数或数组。之所以对您不起作用,是因为客户端上的Meteor.call始终是异步的,并且您必须定义一个回调函数,该方法在响应时被调用。 鉴于这种性质,如果waitOn代码支持Promise,则只能使用Meteor方法,可以在方法回调中解决该问题。

我看到的唯一方法如下:

  • 使用Meteor.onConnection挂钩,并将用户的当前IP地址存储在用户的个人资料(Meteor.users集合)中
  • 设置一个发布整个用户配置文件的全局订阅(因为默认情况下Meteor.user只发布一些默认文档字段)。
  • 在路由waitOn上,查询Meteor.user集合,您将看到该用户当前检测到的IP地址

希望这对您有所帮助。