在我的 next.js api 路由之一内,
例如:pages/api/example.js
我有以下简单的代码。 然后,在这条 route ,我向服务器发出了发布请求。
export default async function example(req, res) {
const data = await axios.post(
https://another_server_Url, // another server api
{
data
})
res.status(200).json({ name: 'John Doe' })
}
我的问题是 another_server
api 是否实现了评级限制机制,
我可以先获取用户IP地址,然后以某种方式通过axios请求传递IP地址。所以another_server
api可以识别真实的ip。
据我了解当前的代码,next.js 服务器以某种方式成为代理。
现在的问题是,因为我在下一个路由器 api 中调用了 Api,所以 IP 地址将始终是我的 next.js
服务器。
最佳答案
您可以从req.headers['x-forwarded-for']
获取客户端的IP - 看看:How to determine a user's IP address in node 。然后,将此 IP 在 axios POST 请求正文中传递给 another_server
。
编辑:
针对您下面的评论,实现很大程度上取决于后端服务器 (another_server
) 的配置及其读取客户端 IP 的方式。例如,检查它是否使用请求 header 来确定 IP - 如果是,则识别特定 header 并在 axios 调用中覆盖它以包含原始客户端 IP,例如:
const clientIp = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.socket.remoteAddress;
const data = await axios({
method: 'post',
url: 'https://google.com',
headers: {
'x-forwarded-for': clientIp
},
// ...
});
另一个解决方案是简单地将请求从客户端直接发送到 another_server
并完全跳过该问题,但我认为这对于您的情况不是一个可行的解决方案。
关于javascript - Next.js 带有 IP 地址的 api 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68506345/