@codebet/geoip-lite-auto-update

中文文档
1.4.241发布于 2026/11/04Apache-2.0CommonJS构建来源已验证近 30 天下载 5932

来自 MaxMind 的 GeoIP API 的轻量级本地 JavaScript 执行

中文使用文档
文档目录19 节
  1. 导言
  2. 哲学
  3. 为什么是地理字
  4. 概要
  5. 安装
  6. 1. 获得图书馆
  7. 2. 更新数据文件(可选)
  8. API 密码
  9. 查找一个 IP 地址
  10. 相当漂亮的打印 IP 地址
  11. 内建更新器
  12. 更新数据的方法
  13. 更新完成后如何在应用程序中重新装入数据
  14. 洞穴
  15. 内存使用情况
  16. 替代品
  17. 参考资料
  18. 版权
  19. 许可证

GeoIP 升数

一个来自MaxMind的GeoLite数据的原生NodeJS API.

本产品包括由MaxMind创建的GeoLite数据,可用自 http://maxmind.com/ 页面存档备份,存于互联网档案馆

页:1 您必须在安装后更新数据文件 。 MaxMind牌照不允许我们发行 使用此软件包的数据文件的最新版本。 遵循下面的指示 更新数据文件 详细情况.

导言

MaxMind为IP到Geo映射提供一组数据文件,同时提供开源库来解析并查找这些数据文件. 人们通常会在他们的CPI周围写一个包装符来获取其他语言(如JavaScript)的这些数据.

GeoIP-lite转而尝试成为一个完全本土的JavaScript库. 转换器脚本将 MaxMind 的 CSV 文件转换为 内部二进制格式(注意这与MaxMind提供的二进制数据格式不同)。 Geoip 模块使用这个 二进制文件以查找IP地址并返回它所映射的国家,区域和城市.

但是,由于GeoLite IPv6数据库目前不包含任何城市或区域,IPv4和IPv6地址都得到了支持 信息,城市,区域和邮政编码的查询仅支持IPv4.

哲学

我真正的目标是快速的JavaScript本土实施IP的地貌图. 我的主要动机是事实上 很难在不用MacPorts的库的情况下为Mac OSX 创建 libgeoip .

为什么是地理字

geoip-lite 是 MaxMind 地理IPI 的完全 JavaScript 执行。 其特征不如使用 libgeoip。 。 。 . 通过缩小范围,这个包在做检查时的速度大约为40%. IP到位置的搜索平均需要20微秒 a Macbook Pro. IPv4地址大约需要6微秒,而IPv6地址大约需要30微秒.

概要

var geoip = require('geoip-lite');

var ip = "207.97.227.239";
var geo = geoip.lookup(ip);

console.log(geo);
{ range: [ 3479298048, 3479300095 ],
  country: 'US',
  region: 'TX',
  eu: '0',
  timezone: 'America/Chicago',
  city: 'San Antonio',
  ll: [ 29.4969, -98.4032 ],
  metro: 641,
  area: 1000 }

安装

1. 获得图书馆

$ npm install geoip-lite

2. 更新数据文件(可选)

运行 cd node_modules/geoip-lite && npm run-script updatedb license_key=YOUR_LICENSE_KEY 以更新数据文件。 (替换) YOUR_LICENSE_KEY 用你的执照钥匙从 maxmind.com (英语)(中文(简体) )

您可以创建一个 maxmind 账户 这里

页:1 这需要大量的内存。 众所周知,它在数字海洋或AWS的微观实例上失败了. 没有改变这种情况的计划. geoip-lite 将所有数据存储在内存中,以便快速.

API 密码

geoip-lite完全同步. 没有召回。 所有屏蔽文件 IO 在启动时完成, 所以全部运行时间 电话在记忆中执行,而且速度快。 在读取内存和索引数据文件时,启动可能要花费多达200ms.

查找一个 IP 地址

如果您在多点四分号、 IPv6 结号、 或 32 位未签名整数中有一个 IP 地址( 已处理) 作为IPv4地址),传递给 lookup 方法。 请注意,您应当删除任何 [ 财务报告和审定财务报表 ] 围绕 IPv6地址在传递到这种方法之前.

var geo = geoip.lookup(ip);

如果找到 IP 地址,则 lookup 方法返回具有下列结构的对象:

{
   range: [ <low bound of IP block>, <high bound of IP block> ],
   country: 'XX',                 // 2 letter ISO-3166-1 country code
   region: 'RR',                  // Up to 3 alphanumeric variable length characters as ISO 3166-2 code
                                  // For US states this is the 2 letter state
                                  // For the United Kingdom this could be ENG as a country like “England
                                  // FIPS 10-4 subcountry code
   eu: '0',                       // 1 if the country is a member state of the European Union, 0 otherwise.
   timezone: 'Country/Zone',      // Timezone from IANA Time Zone Database
   city: "City Name",             // This is the full city name
   ll: [<latitude>, <longitude>], // The latitude and longitude of the city
   metro: <metro code>,           // Metro code
   area: <accuracy_radius>        // The approximate accuracy radius (km), around the latitude and longitude
}

实际数值 range 数组取决于IP是IPv4还是IPv6,并且应该是 被视为内部 geoip-lite。为了获得人类可读格式,将它们传递给 geoip.pretty()

如果找不到IP地址,则 lookup 返回时 null

相当漂亮的打印 IP 地址

如果您有一个32位未签名的整数, 或者一个数字作为其中的一部分返回 range 从 lookup 方法, 页:1 pretty 方法可以用来将它变成人可读的字符串.

    console.log("The IP is %s", geoip.pretty(ip));

如果输入的格式是 geoip-lite 可以识别,否则它返回 输入本身.

内建更新器

这个软件包包含一个更新脚本,可以从MaxMind中取出文件并处理从CSV的转换. 已经设置了 npm 脚本别名来方便这一过程. 请记住这需要互联网和MaxMind 利率限制其服务器的下载量.

您至少需要从 maxmind.com (英语) 运行更新脚本.

包存储了MaxMind数据的校验和,默认情况下只有在校验和已经更改时才下载.

更新数据的方法

#update data if new data is available
npm run-script updatedb license_key=YOUR_LICENSE_KEY

#force udpate data even if checkums have not changed
npm run-script updatedb-force license_key=YOUR_LICENSE_KEY

您也可以通过下列方式运行:

node ./node_modules/geoip-lite/scripts/updatedb.js license_key=YOUR_LICENSE_KEY

更新完成后如何在应用程序中重新装入数据

如果您有服务器运行 geoip-lite,您想要在完成更新后重新装入其地理数据,而不重新启动.

程序

你可以在计划数据更新后按程序拨打

//Synchronously
geoip.reloadDataSync();

//Asynchronously
geoip.reloadData(function(){
    console.log("Done");
});

自动启动并停止监视数据更新

您可以让数据监视器在数据目录中的文件更改时自动刷新相模中的地理数据 .

geoip.startWatchingDataUpdate();

此工具可用于 npm run-script updatedb 以定期更新运行中的服务器上的地理数据.

环境变量

以下环境变量可以设置.

# Override the default node_modules/geoip-lite/data dir
GEOTMPDIR=/some/path

# Override the default node_modules/geoip-lite/tmp dir
GEODATADIR=/some/path

洞穴

这个软件包包括来自MaxMind的GeoLite数据库. 这个数据库并不是现有最准确的数据库, 但是,这是免费的最好办法。 您可以使用来自 MaxMind 的商业 GeoIP 数据库 从 MaxMind 购买许可证,然后使用转换工具将其转换为格式 geoip -lite 明白了。 。 您需要使用 .csv 来自 MaxMind 的要转换的文件.

并请注意,在缩放时,图书馆可能需要长达5秒的时间来装入内存. 这主要取决于 当时你的磁盘多忙 它在轻装的磁盘上能承受到200m. 这是一次 但成本,你用非常快的外观来弥补它.

内存使用情况

对内存消耗的快速测试显示,库每个过程使用约100Mb

    var geoip = require('geoip-lite');
    console.log(process.memoryUsage());
    /**
    * Outputs:
    * {
    *     rss: 126365696,
    *     heapTotal: 10305536,
    *     heapUsed: 5168944,
    *     external: 104347120
    * }
    **/

替代品

如果您在申请期间需要做不到100个查询, 或者您在启动时需要非常快的延迟, 您可能会想调查 快速胶片 一个具有兼容的API的软件包,该软件包对没有服务器的环境进行优化,提供更快的启动时间并降低内存消耗,而牺牲更长的浏览时间.

参考资料

geoip-lite 是 Philip Tellis 版权 双唇@ bluesmoon. info 和其他贡献者,代码的最新版本是 可用时间 https://github.com/bluesmoon/node-geoip 页面存档备份,存于互联网档案馆

许可证

密码和数据有两个许可证。 见 自由主义 详细文件.

版本与发布记录

@codebet/geoip-lite-auto-update 共发布 216 个版本,首次发布于 2020/09/11;过去 12 个月发布了 40 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.4.241latest2026/11/046 天前
1.4.2402026/10/2813 天前
1.4.2392026/10/2120 天前
1.4.2382026/10/1427 天前
1.4.2372026/10/071 个月前
1.4.2362026/09/301 个月前

关于 @codebet/geoip-lite-auto-update 的常见问题

@codebet/geoip-lite-auto-update 是什么?

来自 MaxMind 的 GeoIP API 的轻量级本地 JavaScript 执行

如何安装 @codebet/geoip-lite-auto-update?

在项目目录运行 npm install @codebet/geoip-lite-auto-update,或使用 pnpm add / yarn add / bun add。

@codebet/geoip-lite-auto-update 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/codebet__geoip-lite-auto-update 是否存在。

@codebet/geoip-lite-auto-update 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@codebet/geoip-lite-auto-update 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=10.3.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@codebet/geoip-lite-auto-update 可以商用吗?

@codebet/geoip-lite-auto-update 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@codebet/geoip-lite-auto-update 的下载量有多少?

根据 npm 官方下载统计,@codebet/geoip-lite-auto-update 在 2026/10/10 – 2026/11/08 这 30 天内被下载 5,932 次,日均约 198 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@codebet/geoip-lite-auto-update 还在维护吗?

最新版本 1.4.241 发布于 2026/11/04(6 天前);至今共发布 216 个版本,其中过去 12 个月发布了 40 个;首次发布于 2020/09/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。