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

在Vite(React)中用Axios调用TMDB API遇CORS错误求助

解决Vite React项目调用TMDB API的CORS错误

问题根源

  • 请求头里添加Access-Control-Allow-Origin: *无效,这个头是服务器返回给客户端的响应头,客户端发送请求时携带它没有任何作用。
  • Axios配置中Authorization字段拼写错误(写成了Autherization),会导致TMDB无法正确识别认证信息,间接影响请求合法性。
  • 浏览器同源策略限制:本地http://127.0.0.1:5173与TMDB的https://api.themoviedb.org属于不同源,直接前端请求会被浏览器拦截。

正确解决步骤

1. 修正Axios配置错误

修复认证头拼写,调整请求格式适配TMDB API:

import axios from "axios";

const BASE_URL = "/api"; // 改为代理路径,配合后续Vite代理配置
const TMDB_TOKEN = import.meta.env.VITE_APP_TMDB_TOKEN;

const headers = {
  Authorization: `Bearer ${TMDB_TOKEN}`, // 修正拼写,Bearer与token间加空格
  "Content-Type": "application/json", // TMDB API接受JSON格式,无需text/plain
};

export const fetchDataFromApi = async (url, params) => {
  try {
    const { data } = await axios.get(BASE_URL + url, {
      headers,
      params,
    });
    return data;
  } catch (error) {
    console.log(error);
    return error;
  }
};

2. 配置Vite本地代理

在项目根目录的vite.config.js(或vite.config.ts)中添加代理规则,让Vite转发请求规避同源限制:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  server: {
    proxy: {
      '/api': {
        target: 'https://api.themoviedb.org/3',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '') // 去除/api前缀,匹配TMDB的实际路径
      }
    }
  }
})

3. 重启开发服务器

修改配置后必须重启Vite本地服务,代理规则才会生效。之后再调用API就不会触发CORS错误了。

为什么Postman能正常请求?

Postman是独立客户端工具,不受浏览器同源策略的限制,因此可以直接发起跨域请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:05:31