这篇文章不再是一个真正的问题;我只是想发布此内容以帮助其他人将来避免浪费时间。
目标:检索客户端 IP 地址并根据 IP 中的特定八位字节设置一些特定值。
我正在为我的公司开发一个反应网络应用程序,需要支持三个设施。这三个位置当然存在于不同的地理区域并且具有略微不同的 IP 模式。
我需要根据来自客户端 IP 的八位字节值设置一些会话标识符。为此,我执行了以下步骤。
- 为用户设置快速路由以在首次访问应用程序时点击。
- 获取客户端 IP 并存储在 const/var 中。
- 通过
"."
分解 IP 字符串。 - 执行 If/Then 或 Switch 以确定所需八位组的值。
- 在匹配条件下设置一些会话/逻辑。
感谢 express, req
对象包含一个带有请求 IP 地址值的 ip 键。我们可以利用这个或其他一些第三方库来获取所需的信息。当然,有更好/更安全的方法可以做到这一点,但这是我研究和设置的一种简单方法。非常感谢社区帮助我解决了我的问题。
apiRouter.route('/test')
.get((req, res) => {
const request_ip = req.ip; // Returns string like ::ffff:192.168.0.1
const ip_array = request_ip.split('.') // Returns array of the string above separated by ".". ["::ffff:192","168","0","1"]
// The switch statement checks the value of the array above for the index of 2. This would be "0"
switch(ip_array[2]) {
case('0'):
res.json({'request-ip':ip_array, 'location':'Location A'});
break;
case('1'):
res.json({'request-ip':ip_array, 'location':'Location B'});
break;
case('2'):
res.json({'request-ip':ip_array, 'location':'Location C'});
break;
default:
res.json({'request-ip':ip_array, 'location':'Default Location'});
}
})
我的主要问题之一是我在本地笔记本电脑上进行开发。我的节点服务器在这里运行 express。我还试图从我的本地机器获取我的请求 ip。这没有意义,因为我不断返回 "::1"
作为我的请求 IP。困惑,我做了很多研究,最后发现这是一个明显的 PEBKAC 问题。多亏了 这篇 文章中的 nikoss,它才有意义。
原文由 Josiah Colvin 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以通过从开放 IP 获取此信息来获取此信息
https://api.ipdata.co/