API 请求错误 - 请求的资源上不存在“Access-Control-Allow-Origin”标头

Pas*_*hal 4 javascript api reactjs axios react-hooks

我尝试获取 API 请求,但它返回此错误 Access to XMLHttpRequest at 'https://api.deezer.com/chart' from origin 'http://localhost:3000' has been Blocked by CORS policy: No '请求的资源上存在 Access-Control-Allow-Origin 标头。

编码

const {data, setData} = useState({});
    const API = "https://api.deezer.com/chart";
    useEffect(() => {
        axios(API)
        .then(response => {
            setData(response);
            console.log(data)

        }) 
Run Code Online (Sandbox Code Playgroud)

小智 6

您必须了解 CORS 行为不是错误 - 它是一种按预期工作的机制,以保护您的用户、您或您正在调用的站点。在这里检查链接

您可以通过以下不同的方式使其工作:

临时解决方案:

  1. 禁用 Chrome 安全性使用

    Windows : Windows + R --> chrome --disable-web-security --user-data-dir

    MacOS:打开-na Google\ Chrome --args --user-data-dir=/tmp/temporary-chrome-profile-dir --disable-web-security --disable-site-isolation-trials

  2. 添加和使用 chrome 扩展:https : //chrome.google.com/webstore/detail/moesif-orign-cors-changer/digfbfaphojjndkpccljibejjbppifbc/related?hl=en-GB

永久解决方案:

如果您无权访问 api 服务器,我可以看到您没有,您可以从包装服务器调用此 API,它可以是任何服务器,例如:Node-express 服务器或 Java 服务器(添加基本节点服务器示例只需调用 /getCharts api 即可获得所需的结果)

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

app.get('/getCharts', (req, res) => {
  const API = "https://api.deezer.com/chart";
  axios(API)
    .then(response => {
      console.log(response.data)
      res.json(response.data)
    }).catch(err => {
      res.send('errr!!!')
    })
})

app.listen(port, () => console.log(`Server running on http://localhost:${port}`))
Run Code Online (Sandbox Code Playgroud)