You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js中使用Maxmind Node.js模块?遇lookup.get不是函数错误

Next.js中使用node-maxmind模块的错误解决方法

错误原因分析

node-maxmind是基于Node.js环境开发的模块,依赖Node.js文件系统(fs)和本地文件读取API,而React客户端组件运行在浏览器环境中,没有这些API支持,直接在客户端调用会触发错误;同时服务端环境中若路径处理不当,也会导致初始化失败。

具体错误解决

1. TypeError: lookup.get is not a function

该错误多因在客户端环境调用maxmind.open,或文件路径不正确导致初始化失败,返回的lookup并非预期的Reader实例。

解决方法:将逻辑移至服务端环境,使用绝对路径加载mmdb文件
示例(服务端组件/API路由):

import maxmind, { CityResponse } from 'maxmind';
import { join } from 'path';

// 添加'use server'指令确保逻辑在服务端执行
export async function fetchGeoData(ip: string) {
  // 拼接绝对路径,假设mmdb文件放在项目根目录的public文件夹下
  const dbAbsolutePath = join(process.cwd(), 'public', 'GeoLite2-City.mmdb');
  const lookup = await maxmind.open<CityResponse>(dbAbsolutePath);
  return lookup.get(ip);
}

2. TypeError: The "original" argument must be of type Function

该错误是因为在客户端环境调用了fs.readFileSync,浏览器不支持Node.js的fs模块,导致Reader初始化失败。

解决方法:将Reader初始化逻辑移至服务端,使用绝对路径读取文件
示例(服务端组件/API路由):

import { Reader, CityResponse } from 'maxmind';
import { readFileSync } from 'fs';
import { join } from 'path';

// 仅在服务端执行
export function getCityFromIP(ip: string) {
  const dbAbsolutePath = join(process.cwd(), 'public', 'GeoLite2-City.mmdb');
  const dbBuffer = readFileSync(dbAbsolutePath);
  const lookup = new Reader<CityResponse>(dbBuffer);
  return lookup.get(ip);
}

额外优化建议

  • 缓存Reader实例,避免每次请求重复加载mmdb文件,提升性能:
    import maxmind, { CityResponse } from 'maxmind';
    import { join } from 'path';
    
    let cachedLookup: maxmind.Reader<CityResponse> | null = null;
    
    async function getCachedLookup() {
      if (!cachedLookup) {
        const dbPath = join(process.cwd(), 'public', 'GeoLite2-City.mmdb');
        cachedLookup = await maxmind.open<CityResponse>(dbPath);
      }
      return cachedLookup;
    }
    
    export async function getGeoData(ip: string) {
      const lookup = await getCachedLookup();
      return lookup.get(ip);
    }
    
  • 客户端如需获取地理数据,通过调用服务端API、Server Actions或渲染服务端组件来获取,不要直接在客户端调用maxmind相关方法。

内容的提问来源于stack exchange,提问作者Laurence Cope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:17:42