javascript - Next.js 带有 IP 地址的 api 路由

标签 javascript node.js reactjs next.js

在我的 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/

相关文章:

javascript - 如何使用 async/await 同步而不是异步触发 forEach() ?

javascript - 如何修复 masonry 插件产生的奇怪布局

javascript - 多方 - 与peerJS 进行视频 session

node.js - digital ocean : cross droplet communication

reactjs - 在 React.js 中渲染 favicon 的替代方法

javascript - 我可以从 Universal JS App(.NET) 调用任何 C# 方法吗?

JavaScript- "Image not found"除非我刷新页面

javascript - 在 if 语句中对数组使用 indexOf 的结果不一致

java - 无法在react-native模拟器上运行应用程序

javascript - react : setting state in container from within functional component