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

Meteor 如何在路由中获取客户端IP,meteor,iron-router,Meteor,Iron Router,我试图在Iron路由器的路由过程中检索客户的IP地址。我有一个服务器端函数(getIP),但是路由中的“waitOn”函数不会等待服务器函数返回: waitOn: function () { Meteor.call('getIP', function(error, clientIp){...}} 我可以强制它等待吗,或者我可以通过任何其他方式获得IP吗?根据文档,waitOn钩子必须返回一个处理程序、一个函数或一个数组。它不适用于您的原因是,客户机上的Meteor.call始终

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

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

我可以强制它等待吗,或者我可以通过任何其他方式获得IP吗?

根据文档,waitOn钩子必须返回一个处理程序、一个函数或一个数组。它不适用于您的原因是,客户机上的Meteor.call始终是异步的,您必须定义一个回调函数,该函数在方法响应时调用。 鉴于这种性质,您只能使用Meteor方法,如果waitOn代码支持承诺,则可以在方法回调中解决

我看到这一点的唯一方式是:

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

我希望这对您有所帮助,并且对您有用。

根据文档,waitOn钩子必须返回处理程序、函数或数组。它不适用于您的原因是,客户机上的Meteor.call始终是异步的,您必须定义一个回调函数,该函数在方法响应时调用。 鉴于这种性质,您只能使用Meteor方法,如果waitOn代码支持承诺,则可以在方法回调中解决

我看到这一点的唯一方式是:

  • 使用Meteor.onConnection挂钩,并将用户的当前IP地址存储在用户配置文件(Meteor.users集合)中
  • 设置发布整个用户配置文件的全局订阅(因为默认情况下Meteor.user只发布几个默认文档字段)
  • 在route waitOn上,查询Meteor.user集合,您将看到该用户当前检测到的IP地址
我希望这对你有帮助,对你有帮助