You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js借助Cloudflare获取用户真实位置 替代getStaticProps实现方案

原方案差异原因

getStaticProps属于Next.js服务端运行的静态生成逻辑,内部发起的所有请求都由部署的服务器端执行,所以你调用Cloudflare trace接口拿到的是谷歌云服务器的位置,本地运行时拿到的就是本地环境的位置,和真实访问用户的位置无关。

替代方案

要拿到用户端的位置,需要把请求放到用户浏览器侧执行,你已经验证的客户端useEffect方案即可实现需求,完整改造后的页面代码如下:

import { useState, useEffect } from 'react'

function MyPage() {
  // 可自定义默认兜底位置
  const [locData, setLocData] = useState("EN");
  
  useEffect(() => {
    fetch("https://www.cloudflare.com/cdn-cgi/trace")
      .then((response) => response.text())
      .then((two) => {
        const data = two.replace(/[\r\n]+/g, '","').replace(/\=+/g, '":"');
        const formattedData = '{"' + data.slice(0, data.lastIndexOf('","')) + '"}';
        const locale = JSON.parse(formattedData);
        setLocData(locale.loc);
      });
  }, []);

  return locData
}

export default MyPage
优化建议
  • 可增加加载状态,避免页面初始加载时默认值和实际位置切换出现的跳变
  • 可将获取到的位置信息存储到localStorage,用户后续访问无需重复请求接口

内容的提问来源于stack exchange,提问作者Celil Şahin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:15:05