meteor - 如何在路由中获取客户端 IP
问题描述
我试图在 Iron Router 的路由过程中检索客户的 IP 地址。我有一个服务器端函数(getIP),但是路由内的“waitOn”函数不会等待服务器函数返回:
waitOn: function () {
Meteor.call('getIP', function(error, clientIp){...}}
我可以强制它等待,还是可以通过其他方式获取 IP?
解决方案
根据文档,waitOn 挂钩必须返回一个处理程序、一个函数或一个数组。它不适合您的原因是客户端上的 Meteor.call 始终是异步的,您必须定义一个回调函数,该函数在方法响应时调用。鉴于这种性质,您只能使用 Meteor 方法,如果 waitOn 代码支持 Promise,则可以在方法回调中解决。
我看到这一点的唯一方法是:
- 使用 Meteor.onConnection 钩子,并将用户的当前 IP 地址存储在用户的配置文件中(Meteor.users 集合)
- 设置发布整个用户配置文件的全局订阅(因为默认情况下 Meteor.user 仅发布一些默认文档字段)。
- 在路由 waitOn 上,查询 Meteor.user 集合,你会看到当前检测到的那个用户的 IP 地址
我希望这会有所帮助,并且对您有用。
推荐阅读
- java - 多线程 IllegalMonitorStateException
- opengl - glsl 非 mipmap 纹理不显示
- java - 如何从给定的 GCD 和 LCM 中获取数字
- android - 重复的 zip 条目 CoordinatorLayout$Behavior.class]) 并且在更新库后无法合并 Dex
- python - 基于 Tkinter 文本小部件中的第一个字符标记整个单词
- db2 - 我在 db2 express c 10.1 的存储过程中使用带有声明的滚动得到 -104
- oracle - 如何在 Docker Oracle 12 中执行 sql 文件?
- scala - 如何从类型参数实例化 Akka 演员
- wordpress - WordPress cookie 不工作
- c# - 尝试通过右键单击 Web 元素打开新选项卡,但无法打开