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

Next.js+BigCommerce API+React Query SSG下,API返回数据却出现CORS错误

Next.js + React Query SSG 下的 BigCommerce API CORS 问题解决

问题原因

getStaticProps 在服务器端预取数据时能正常调用 BigCommerce API,但客户端 React Query 在页面 hydrate 后会自动发起后台刷新请求——这个请求是从浏览器直接发往 BigCommerce API 的,触发了跨域限制。另外,直接在客户端代码里携带 X-Auth-Token 属于严重安全问题:Token 会暴露给所有访问页面的用户,可能导致商店被恶意操作。


解决方案:用 Next.js API 路由做代理

所有 BigCommerce API 请求通过自身后端代理转发,浏览器仅请求同域名接口,既避免 CORS,又保护敏感凭证只在服务器端使用。

步骤1:创建代理 API 路由

在 pages/api 目录下新建 products.ts:

import type { NextApiRequest, NextApiResponse } from 'next';
import axios from 'axios';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  try {
    const response = await axios.get(
      'https://api.bigcommerce.com/stores/alw7i94qb0/v3/catalog/products',
      {
        headers: {
          'X-Auth-Token': process.env.BIGCOMMERCE_STORE_API_TOKEN!,
          // 若需要可添加 Client ID
          // 'X-Auth-Client': process.env.BIGCOMMERCE_STORE_API_CLIENT_ID!,
        },
      }
    );
    res.status(200).json(response.data);
  } catch (error) {
    res.status((error as any).response?.status || 500).json({
      error: (error as any).response?.data || '获取商品失败',
    });
  }
}

步骤2:修改数据获取逻辑

更新 API 配置代码,让请求指向代理接口而非直接调用 BigCommerce API:

import axios from "axios";
import { useQuery } from "@tanstack/react-query";

const fetchPosts = async () => {
  // 请求自身代理接口
  const { data } = await axios.get(`/api/products`);
  return { data };
};

const usePosts = () => {
  return useQuery({
    queryKey: ["posts"],
    queryFn: () => fetchPosts(),
    // 可选:设置 staleTime 减少不必要的后台刷新,根据业务需求调整
    staleTime: 60 * 60 * 1000, // 1小时内视为新鲜数据,不自动刷新
  });
};

export { usePosts, fetchPosts };

步骤3:验证效果

现在无论是服务器端 getStaticProps 预取,还是客户端 React Query 的后台刷新,请求都会经过 Next.js 代理接口,不会触发 CORS,同时 Auth Token 仅在服务器端环境中使用,不会暴露给客户端。


额外说明

  • React Query 的后台刷新是默认行为,用于保证数据新鲜度,可通过 staleTime 调整刷新频率,或用 cacheTime 控制缓存时长。
  • 绝对不要在客户端代码中直接使用敏感凭证(如 API Token),必须通过后端代理转发请求。

内容的提问来源于stack exchange,提问作者Nedim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:01:55