如何在Route内获取客户IP

问题描述 投票:1回答:1

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

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

我可以强迫它等待吗? 或者我可以用其他方法获取IP吗?

meteor iron-router
1个回答
0
投票

根据文档,waitOn钩子必须返回一个Handler,一个函数或一个数组。"为什么你不能用,是因为客户端的Meteor.call总是async的,你必须定义一个回调函数,在方法响应时调用。"鉴于这个性质,你只能使用Meteor方法,如果waitOn代码支持一个Promise,可以在方法回调时解决。

我认为唯一的方法是下面这个。

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

希望这对你有帮助,对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.