qq_41457701 2023-11-10 14:10 采纳率: 30%
浏览 15
已结题

JS获取当前的Ip地址

如下代码打算在登陆时获取当前的ip地址,但是浏览器端点击登录按钮后每次只能输出一次,然后就卡住不动,要刷新页面才能再次获取到Ip,每次刷新只有第一次能用



```javascript
            const loginIp = req.connection.remoteAddress;//获取当前登录用户的Ip,::ffff:127.0.0.1格式
            let loginIpIpv4 = net.isIPv6(loginIp) ? loginIp.split(':').reverse()[0] : loginIp;//转为ipv4格式
            console.log(loginIpIpv4);


现在发现本地调试可以,,但是在服务器端运行,浏览器访问就会出问题

  • 写回答

7条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-10 14:10
    关注

    基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:

    • 代码中使用的方法 req.connection.remoteAddress 在每次HTTP请求时确实可以获取到客户端的IP地址。如果你在点击登录按钮后遇到页面卡住的问题,那么可能是因为服务器端的代码出现了阻塞操作或者没有正确地结束响应。

    这里有一些可能的解决步骤:

    1. 确保登录的逻辑中没有无限循环或者长时间的阻塞操作。
    2. 确保在获取IP之后,有相应的逻辑来处理登录,并且最终调用了 res.end() 或者 res.send() 来结束响应。
    3. 如果你使用的是Express框架,可以尝试使用 req.ip 或者通过中间件来获取IP地址。
    • 此外,关于 req.connection.remoteAddress 返回的IP地址是IPv6格式,但是你的代码转换IPv4的方法可能存在问题。如果你的服务器在IPv6环境下运行,而客户端使用IPv4,那么你会得到一个IPv4映射到IPv6的地址,通常是以 ::ffff: 开头的。所以你的转换逻辑应该是有效的,但前提是返回的地址确实是这种映射格式。

    如果问题依旧存在,那么可能需要详细查看服务器端的日志,确定是哪一部分代码导致了响应没有正确结束。同时,确保网络环境没有问题,比如防火墙设置、IP过滤等都可能导致这种问题。如果能提供更多关于服务器响应逻辑的代码,可能有助于更准确地找到问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月10日
  • 修改了问题 11月10日
  • 修改了问题 11月10日
  • 创建了问题 11月10日