这篇文章不再是一个问题,我只是想发布它以帮助其他人避免浪费时间。
目标:检索客户端IP地址并根据IP的某个字节设置一些特定的值。
我正在为公司开发一个基于React的Web应用程序,并需要支持三个设施。三个位置当然存在于不同的地理区域,并且具有略微不同的IP模式。
我需要根据客户端IP的某个字节值设置一些会话标识符。为此,我采取了以下步骤。
- 为用户在应用程序的初始访问上设置express路由。
- 获取客户端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'});
}
})
我的主要问题之一是我在本地电脑上开发。我的node服务器正在这里运行express。我还试图从本地机器获取我的请求IP。这没有意义,因为我不断收到"::1"
作为我的请求IP。经过大量研究后,我终于发现这是一个明显的PEBKAC问题。感谢这篇文章中的nikoss,一切都变得清晰了。