当前位置: 首页 > 知识库问答 >
问题:

Cors错误与axios反应,但不与读取

柳刚豪
2023-03-14

我正在尝试从react前端查询我的Azure搜索门户。我已启用正确索引上的所有COR。当我用fetch查询时,我得到的数据很好,但是当我用axios查询时,我得到了以下错误

CORS策略阻止从源http://localhost:3000在maskedurl访问XMLHttpRequest:对预试请求的响应不通过权限改造检查:请求的资源上不存在访问控制允许源标头。

这是我的组件

import React from 'react';
import azure from '../apis/azure';

class GeoSearch extends React.Component {
    state = {
        lat: '',
        lon: ''
    }

    componentDidMount(){
        window.navigator.geolocation.getCurrentPosition(
          position => this.setState({ lat: position.coords.latitude, lon: position.coords.longitude }),
          err => this.setState({ errorMessage: err.message }),
        );
    };

    onNavLoad = async (lon, lat) => {
        const response = await azure.post('/', {
            params: { 
                "filter": "geo.distance(Location, geography'POINT(-6.184120 53.605190)') le 4",
                "Access-Control-Allow-Origin": "*"
            },
            headers: { 
                'api-key': 'apikeymasked',
                "Access-Control-Allow-Origin": "*"
            },
        });


        console.log(response);
    }
    
    render() {
        if (this.state.lat){
            return (
                <div>
                    <h1>Geo Search</h1>
                    <div>{this.state.lon}</div>
                    <div>{this.state.lat}</div>
                    <button onClick={this.onNavLoad}>Click</button>
                </div>
            )
        }
        return (
            <div>
                <h1>Geo Search Loading</h1>
            </div>
        );
    }
}

export default GeoSearch;

这是我在名为azure.js的文件中的axios.create方法,该文件位于名为API的组件文件夹的同级文件夹中

import axios from 'axios';

export default axios.create({
    baseURL: 'maskedurl',
    params: {
        "search": "",
        "select": "name",
        "count": "true"
    },
    headers: {
        "Access-Control-Allow-Origin": "*"
    }
}); 

这不管用。

然而,当我将onNavLoad函数中的axios切换到类似这样的fetch时,它可以完美地工作。

    onNavLoad = async (lon, lat) => {


    var myHeaders = new Headers();
    myHeaders.append("api-key", "apikeymasked");
    myHeaders.append("Content-Type", "application/json");

    var raw = JSON.stringify({"search":"","filter":"geo.distance(Location, geography'POINT(-6.184120 53.605190)') le 50","select":"name","count":"true"});

    var requestOptions = {
      method: 'POST',
      headers: myHeaders,
      body: raw,
      redirect: 'follow'
    };

    const response = fetch("maskedurl", requestOptions)
      .then(response => response.json())
      .then(result => console.log(result.value))
      .catch(error => console.log('error', error));

    console.log(response);
}

有什么想法吗?

共有1个答案

梁丘伟
2023-03-14

通常是服务器站点问题,但您可以使用PROXYURL从客户端覆盖此问题

const proxyURL = "https://cors-anywhere.herokuapp.com/";
const requestURL = YOUR URL;
const response = fetch(proxyURL + requestURL, requestOptions)
 类似资料:
  • 问题内容: 这是我第一次使用axios,遇到错误。 使用正确的url和参数,当我检查网络请求时,确实可以从服务器中获得正确的答案,但是当我打开控制台时,我看到它没有调用回调,而是捕获了错误。 错误:网络错误堆栈跟踪:createError @ http:// localhost:3000 / static / js / bundle.js:2188:15 handleError @ http://

  • 我已经为jwt身份验证设置了一个节点/Express服务器,可以与我的Create React应用程序一起使用。我用的是CORS npm包和简单中间件< code > app . use(CORS());来解决预期的CORS相关问题及其正常工作。 现在我想将 Elasticsearch 和 ReactiveSearch 添加到我的 React 应用程序中,并试图弄清楚如何克服本地 ES 实例的 C

  • 我正在使用与axios的反应来获取一些信息。我正在向授权用户发送JWT令牌,并在控制台浏览器中获得响应 “访问位于的XMLHttpRequest”https://beer-tonight.herokuapp.com/beer/getBeerStatus“起源”http://localhost:3000'已被CORS策略阻止:飞行前响应中的访问控制允许标头不允许请求标头字段授权。“ 这是我的代码:

  • 根据本教程,我正在将Fabric crashlytics集成到android react本机应用程序中。但是在使用安装Fabric软件包后,我尝试使用为应用程序添加午餐,但出现以下错误: 配置项目': react-nily-结构'时出现问题。 无法解析配置的所有文件: react-nate-结构: classpath。 找不到lint gradle api。jar(com.android.tool

  • 我试着用拉威尔·科尔斯(https://github.com/barryvdh/laravel-cors)使用Laravel 5.2更新数据,但我总是得到相同的错误: 无法加载XMLHttpRequesthttp://dev.pesanlab.com/api/v1/order/cart/add. 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://

  • **>错误:请求失败,状态代码为404, 在createError(createError.js:16)在settle.js:17)在xmlHttpRequest.HandleLoad(xhr.js:62)**