首页 > 解决方案 > 如何在路由中获取客户端 IP

问题描述

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

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

我可以强制它等待,还是可以通过其他方式获取 IP?

标签: meteoriron-router

解决方案


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

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

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

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


推荐阅读