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

API请求报错:请求资源缺少Access-Control-Allow-Origin头问题咨询

解决Deezer API请求的CORS报错问题

嘿,这个CORS报错我太熟了!咱们来一步步搞定它~

问题原因

你遇到的是浏览器的跨域资源共享(CORS)安全限制:当你从本地开发环境http://localhost:3000请求https://api.deezer.com/chart时,对方服务器没有返回Access-Control-Allow-Origin响应头,浏览器为了安全就直接拦截了这次请求。

几种可行的解决方案

1. React项目内置代理(最简单的前端方案)

在你的React项目根目录的package.json里添加一行代理配置:

"proxy": "https://api.deezer.com"

然后修改你的API请求路径:

const API = "/chart"; // 本地服务器会自动把请求转发到https://api.deezer.com/chart

最后重启你的React开发服务器,这样请求就会通过本地代理转发,绕开浏览器的CORS限制。

2. 使用JSONP(适配Deezer API的方案)

Deezer API支持JSONP方式绕过CORS,你可以借助axios-jsonp-adapter实现:
首先安装依赖:

npm install axios-jsonp-adapter

然后修改你的请求代码:

import axios from 'axios';
import jsonpAdapter from 'axios-jsonp-adapter';

const {data, setData} = useState({}); 
const API = "https://api.deezer.com/chart"; 

useEffect(() => {
  axios(API, {
    adapter: jsonpAdapter
  })
  .then(response => {
    setData(response);
    console.log(response); // 注意:setData是异步的,直接log data拿不到最新值,应该log response
  })
}, []);

3. 自建后端代理服务器(更灵活的通用方案)

如果上面两种方法都不适用,你可以用Node.js+Express搭一个简单的代理服务器,让后端去请求Deezer API(后端请求不受浏览器CORS限制):
首先安装依赖:

npm install express axios

然后创建一个proxy.js文件:

const express = require('express');
const axios = require('axios');
const app = express();
const port = 4000;

app.get('/chart', async (req, res) => {
  try {
    const response = await axios.get('https://api.deezer.com/chart');
    res.send(response.data);
  } catch (error) {
    res.status(500).send(error.message);
  }
});

app.listen(port, () => {
  console.log(`Proxy server running at http://localhost:${port}`);
});

启动代理服务器:

node proxy.js

最后修改前端的API请求路径:

const API = "http://localhost:4000/chart";

额外小提示

你代码里的console.log(data)在then回调里直接调用的话,因为setData是异步更新状态的,这里打印的data还是更新前的旧值。如果要查看最新的data,可以添加一个监听data变化的useEffect:

useEffect(() => {
  console.log(data);
}, [data]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:57:57