查找位置最好的Node.js模块是什么?

57

我找到了几个可以使用IP地址查找客户端位置和网络信息的 node.js 模块

要求:

  1. 位置 - 国家、城市、州、纬度、经度等。

  2. 网络 - 互联网服务提供商、互联网连接类型和互联网速度等。

  3. 数据准确性 - 最大可能性。

注意:寻找服务器端解决方案。

上述模块使用 maxmind 数据。我也阅读了关于 maxmind 数据准确性 的文章。

我有点困惑选择哪个 node.js 模块,我想知道是否有更好的 node.js 框架可用于查找符合我的要求的信息,或者任何其他语言插件可以移植到 node.js。

任何想法都将受到赞赏。


@josliber 这个问题很重要,不涉及观点。它涉及到 IP 到位置转换的最有效延迟方法。 - Internial
@内部问题询问推荐内容的主题在stackoverflow上是不被允许的,这也是我关闭了这个问题的原因。您可以在https://stackoverflow.com/help/on-topic了解更多关于本网站所涉及的主题。 - josliber
IPLocate.io 提供免费的 API:https://www.iplocate.io/api/lookup/8.8.8.8。主页上提供了文档和使用说明,包括 Node.js 的使用方法:www.iplocate.io - 免责声明:本人运营此服务。 - ttarik
我认为这个Node.js模块可能适合您 [位置](https://www.npmjs.com/package/request-country) - Fillipo Sniper
3个回答

52

使用基于IP的地理定位是可能的,但不够精确。因此,我建议您考虑采用混合方法,例如尝试通过浏览器内的HTML5地理定位API获取用户位置,如果必要,可以回退到服务器端。

我查看了Node.js中两个最常用的GeoIP/-location模块,并且它们都使用MaxMind提供的数据集。据我所知,您必须手动更新这些数据库,这是一个明显的缺点。因此,您可以考虑编写一个小型同步服务/脚本,每月更新一次数据库。(有关MaxMinds免费解决方案的更多信息,请访问此处。)

kuno/GeoIP是一个GeoIP绑定库,因此它的核心是使用libGeoIP C库,这很好,但可能不像纯JavaScript实现bluesmoon/node-geoip那样可移植。两者都可以,取决于您更喜欢的库。在性能方面,您需要进行一些基准测试(如果此话题对您很重要)...没有通用答案来回答哪种类型的模块(C绑定/本地)将更快。

如果您愿意花费一些钱,您也可以查看MaxMinds Web服务,它是一个简单的REST API,并且是最精确的方法。文档相当不错,因此使用它不会成为问题。


2
首先感谢提供这些宝贵的信息,我已经实现并测试了kuno/GeoIP,但它没有提供因为没有免费的数据库来获得Internet服务提供商和互联网连接类型等信息,否则kuno/geoip还不错。 - karthick
@dom 你所说的AFAIK是什么意思? - Internial
@Internial AFAIK - 据我所知 lol - karthick
“不太准确”简直是个轻描淡写的说法。例如,苹果公司通常只能在我当前位置的962公里(598英里)范围内找到我。而且这还是有点太近了。 - vhs

29

如果你获取了IP,你可以调用外部服务(例如freegeoip.net)并使用请求模块获取位置信息。

(ip, location) ->
  url = 'http://freegeoip.net/json/' + ip
  request.get url, (error, response, body) ->
    if !error && response.statusCode == 200
      data = JSON.parse body
      location data

对于网络信息,我没有解决方案,但我也在寻找一个。


2
我同意,如果OP想要准确性,我会使用像谷歌地图库这样的外部服务。只有在用户允许的情况下,使用HTML5才能获取位置。 - Eric Leroy
1
你知道如何获取客户端的IP地址吗?如果不知道,告诉我,我会编辑我的答案。 - brnrd
3
是的,这段代码的意思是获取请求头中的 'x-forwarded-for' 属性作为 IP 地址,如果该属性不存在,则获取远程连接地址作为 IP 地址。 - karthick
2
这现在已经成为一项付费服务。 - buycanna.io
目前每月只有100个免费请求。 - Tim
显示剩余3条评论

12

你可以从我的API (http://ipinfo.io) 获取你需要的所有信息:

$ curl ipinfo.io
{
  "ip": "67.188.232.131",
  "hostname": "c-67-188-232-131.hsd1.ca.comcast.net",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.4192,-122.0574",
  "org": "AS7922 Comcast Cable Communications, Inc.",
  "postal": "94043"
}

它支持JSONP和CORS,因此您可以在服务器端或客户端使用它。有关更多详细信息,请访问http://ipinfo.io/developers


我创建了这个模块,也许你可以将它集成到你的答案中:https://github.com/IonicaBizau/node-ipinfo :-) - Ionică Bizău
2
ipinfo.io的效果很好,但要注意,如果您想在https上使用它,就必须付费。 - kpg
1
ipinfo.io/json/<ipaddress> 的功能完美运行。 - mythicalcoder
1
@kpg 现在不再了,显然免费用户也可以得到https。 - CaptRisky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接