Javascript Can';t使用fetch API获取数据

Javascript Can';t使用fetch API获取数据,javascript,reactjs,cors,fetch,Javascript,Reactjs,Cors,Fetch,我无法使fetch()API正常工作。我有一种强烈的感觉,我在做错事 我有一个运行在端口3005上的简单express服务器,它以json格式返回数据,还有一个运行在端口3000上的react.js客户端 我正在使用fetch()向http://localhost:3005/api但是我在控制台上收到了这些消息 已阻止跨源请求:同一源策略不允许读取 位于的远程资源。 (原因:缺少CORS标头“访问控制允许原点”) TypeError:尝试获取资源时出现NetworkError 我添加了一个标题,

我无法使fetch()API正常工作。我有一种强烈的感觉,我在做错事

我有一个运行在端口3005上的简单express服务器,它以json格式返回数据,还有一个运行在端口3000上的react.js客户端

我正在使用
fetch()
http://localhost:3005/api
但是我在控制台上收到了这些消息

已阻止跨源请求:同一源策略不允许读取 位于的远程资源。 (原因:缺少CORS标头“访问控制允许原点”)

TypeError:尝试获取资源时出现NetworkError

我添加了一个标题,并通读了类似的问题,但我仍然无法让它工作,我仍然收到相同的消息

我做错了什么?(这是代码)


我在过去多次遇到过这个问题,通常只使用axios。但是这次,我想让
fetch()
工作

您的服务器端点需要支持Access Control Allow Origin标头,而不仅仅是客户端

一般流程如下:

  • 客户端正在执行飞行前请求,以检查服务器是否支持请求的cors策略

  • 当服务器认为请求被允许时,它接收飞行前消息并用正确的报头进行应答

  • 客户机接收到答案,并通过包含的标题知道是否允许实际请求

  • (在您的情况下)当服务器未返回标头时,浏览器将不允许实际调用并给出您遇到的错误

  • 因此,为了解决这个问题,您需要修改服务器代码以返回飞行前请求的正确标头

    也可以看到这个stackoverflow


    看这个。请特别查看有关飞行前请求的部分。

    谢谢您的回答。我还没有深入研究提供的资源,但我能够让它工作。这些头应该从服务器发送到客户端,而不是从客户端发送到服务器。
    let url = 'http://localhost:3005/api';
        fetch(url, { 
          method: 'GET',
          headers:{
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Credentials':true,
            'Access-Control-Allow-Methods':'POST, GET'
          }
        }).then(response => response.json)
        .then(data => console.log(data))