
JS
使用 Express.JS 开发 Web 应用时,我们经常会使用 req.ip 这个属性来获取客户端的 IP 地址。然而,有时候我们会发现 req.ip 返回的 IP 地址格式可能会是 ::ffff:127.0.0.1 这样的形式,而不是我们期望的标准 IPv4 地址。
req.ip 会返回 ::ffff:127.0.0.1 这样的格式。这是因为 Express.JS 使用了代理服务器(Proxy Server)来处理客户端请求。当客户端通过代理服务器发送请求时,代理服务器会将客户端的 IP 地址添加到请求头中的 x-forwarded-for 字段中。在 Express.JS 中,req.ip 实际上返回的是请求头中的 x-forwarded-for 字段的值。而在 IPv6 地址转换成 IPv4 地址时,会以 ::ffff: 开头。所以我们才会看到 ::ffff:127.0.0.1 这样的格式。现在,让我们来看一个实际的例子,来演示如何正确处理这种情况:Javascriptconst express = require('express');const app = express();app.set('trust proxy', true);app.get('/', (req, res) => { const ip = req.ip.replace('::ffff:', ''); // 去除开头的 '::ffff:' res.send(<code>你的 IP 地址是:${ip}</code>);});app.listen(3000, () => { console.log('应用已启动,监听端口 3000');});在上面的示例代码中,我们通过设置 app.set('trust proxy', true) 来告诉 Express.JS 信任代理服务器,并获取真实的客户端 IP 地址。然后,我们通过 req.ip.replace('::ffff:', '') 将开头的 ::ffff: 字符串移除,得到真实的 IPv4 地址。最后,我们将这个地址发送给客户端。解决方案:为了正确解析 req.ip 返回的 IP 地址,我们可以使用 req.ip.replace('::ffff:', '') 这个方法来去除开头的 ::ffff: 字符串,得到真实的 IPv4 地址。示例代码:Javascriptconst express = require('express');const app = express();app.set('trust proxy', true);app.get('/', (req, res) => { const ip = req.ip.replace('::ffff:', ''); // 去除开头的 '::ffff:' res.send(<code>你的 IP 地址是:${ip}</code>);});app.listen(3000, () => { console.log('应用已启动,监听端口 3000');});通过以上代码,我们可以正确获取客户端的 IP 地址,并进行相应的处理。这样,我们就解决了 req.ip 返回 ::ffff:127.0.0.1 这种格式的问题。:在 Express.JS 中,req.ip 属性可以用来获取客户端的 IP 地址。然而,由于代理服务器的存在,有时候我们会得到类似 ::ffff:127.0.0.1 这样的格式。为了正确解析这个地址,我们可以使用 req.ip.replace('::ffff:', '') 这个方法来去除开头的 ::ffff: 字符串,得到真实的 IPv4 地址。希望本文对你理解 req.ip 的返回格式以及解决相关问题有所帮助。如有疑问,欢迎留言讨论!Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号