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

如何基于Node.js+Express.js获取用户浏览器名称、语言及国家信息?

嘿,我来帮你搞定这个需求!在Express.js里获取浏览器名称、语言以及用户所在国家的信息其实并不复杂,咱们分模块一步步实现:

1. 获取浏览器名称与版本

你提到的useragent工具确实能搞定浏览器相关信息,不过更推荐用功能更完善的ua-parser-js包,解析结果更精准。

实现步骤:

  • 先安装依赖:
npm install ua-parser-js
  • 在Express路由中使用:
const express = require('express');
const { UAParser } = require('ua-parser-js');
const app = express();

app.get('/', (req, res) => {
  // 从请求头的User-Agent字段解析浏览器信息
  const parser = new UAParser(req.headers['user-agent']);
  const browserInfo = parser.getBrowser();
  
  res.send(`
    浏览器名称:${browserInfo.name}<br>
    浏览器版本:${browserInfo.version}
  `);
});

app.listen(3000, () => console.log('服务启动在3000端口'));
2. 获取浏览器偏好语言

这个直接读取请求头的Accept-Language字段即可,要是想更规范地解析多语言优先级,可以用accept-language-parser包:

实现步骤:

  • 安装依赖:
npm install accept-language-parser
  • 路由中解析语言:
const acceptLanguage = require('accept-language-parser');

app.get('/', (req, res) => {
  const langHeader = req.headers['accept-language'];
  // 解析语言列表,返回带优先级的数组
  const parsedLangs = acceptLanguage.parse(langHeader);
  
  // 取用户最偏好的语言
  const preferredLang = parsedLangs.length 
    ? `${parsedLangs[0].code}-${parsedLangs[0].region || ''}`.trim()
    : '未知';
  
  res.send(`偏好语言:${preferredLang}`);
});
3. 获取用户所在国家

浏览器不会直接发送国家信息,得通过用户的IP地址做地理定位。这里推荐用本地IP库geoip-lite(无需调用外部API,速度快),但要注意IP定位不是100%准确,尤其是用户使用VPN/代理时。

实现步骤:

  • 安装依赖:
npm install geoip-lite
  • 路由中获取IP并定位:
const geoip = require('geoip-lite');

// 如果你用了Nginx这类反向代理,必须加这行才能拿到用户真实IP
app.set('trust proxy', true);

app.get('/', (req, res) => {
  const userIp = req.ip; // 获取用户真实IP
  const geoData = geoip.lookup(userIp);
  
  const country = geoData 
    ? `${geoData.country}(${geoData.city || '未知城市'})`
    : '无法确定国家';
  
  res.send(`所在国家:${country}`);
});
完整整合示例

把三个功能放在一起,就是这样:

const express = require('express');
const { UAParser } = require('ua-parser-js');
const acceptLanguage = require('accept-language-parser');
const geoip = require('geoip-lite');

const app = express();
app.set('trust proxy', true);

app.get('/', (req, res) => {
  // 1. 浏览器信息
  const browserParser = new UAParser(req.headers['user-agent']);
  const browser = browserParser.getBrowser();
  
  // 2. 语言信息
  const langHeader = req.headers['accept-language'];
  const parsedLangs = acceptLanguage.parse(langHeader);
  const preferredLang = parsedLangs.length 
    ? `${parsedLangs[0].code}-${parsedLangs[0].region || ''}`.trim()
    : '未知';
  
  // 3. 国家信息
  const userIp = req.ip;
  const geoData = geoip.lookup(userIp);
  const country = geoData 
    ? `${geoData.country}(${geoData.city || '未知城市'})`
    : '无法确定国家';

  res.send(`
    <h2>用户信息汇总</h2>
    <p>浏览器:${browser.name} v${browser.version}</p>
    <p>偏好语言:${preferredLang}</p>
    <p>所在地区:${country}</p>
  `);
});

app.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000');
});

内容的提问来源于stack exchange,提问作者Kerem Çakır

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:20