【问题标题】:Problems using uri on axios在 axios 上使用 uri 的问题
【发布时间】:2020-12-13 12:55:05
【问题描述】:

我目前使用 api rest 来通过 URI 传递控制器参数、版本和操作。但是,当我使用超过 19 个字符的 URI 执行请求时,会出现以下 CORS 错误:

CORS 策略已阻止从源“http://localhost:3000”访问“http://my-api-host/toll/vehicle/v1/list”处的 XMLHttpRequest:对预检请求的响应没有“ t 通过访问控制检查:它没有 HTTP ok 状态。

在身份验证中,即使 URI 超过 19 个字符,请求也能正常工作。但是,具有超过 19 个字符的不同 URI 的任何其他请求都会产生相同的错误。我使用我的应用程序的 API 并且请求正常工作。

我在 Reactjs 中使用 axios。 该 api 已经配置为接受我正在使用的内容类型(应用程序/json),并且也已经在接受来自不同来源的请求。

我的请求代码:

request(uri, params = {}){
        return new Promise((resolve, reject) => {
            axios
                .post('http://my-api-host' + uri, JSON.stringify(params), {
                    headers: {
                        'Content-Type': 'application/json'
                    }
                })
                .then(response => {
                    if (response.data.success) {
                        resolve(response.data);
                    } else {
                        reject(response.data);
                    }
                });
        });
    };

有没有人经历过这个并且可以提供帮助?提前致谢

【问题讨论】:

    标签: reactjs request axios cors uri


    【解决方案1】:

    您是否使用 Fetch 代替?

    async function postData(url = '', params = {}) {
      // Default options are marked with *
      const response = await fetch(url, {
        method: 'POST', // *GET, POST, PUT, DELETE, etc.
        mode: 'cors', // no-cors, *cors, same-origin
        headers: {
          'Content-Type': 'application/json'
        },
        qs: JSON.stringify(params) // query string data
      });
      return response.json(); // parses JSON response into native JavaScript objects
    }
    
    postData('http://my-api-host', params)
      .then(data => {
        console.log(data);
      });
    

    【讨论】:

    • 奇怪的是,如果我在我的 API 中打印一些数据,请求会返回 200,然后我会捕获我打印的数据。在我这样做之后,它可以处理之前给出此错误的所有请求,然后我在 api 中再次打印一些数据,它再次工作。是不是很奇怪?
    • 奇怪的是你能分享你的 api 也在 API 中启用 CORS
    • 在我的 api 中包含这个配置: Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "POST, GET, DELETE, OPTIONS" Header set Access-Control -Max-Age "1800" 标头集 Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, x-client-key, x-client-token, x-client-secret, Authorization " 标头设置 Access-Control-Allow-Credentials "true"
    • 我运行另一个测试,奇怪的是,如果我在我的 API 中打印一些数据,请求会返回 200,然后我会捕获我打印的数据。在我这样做之后,它可以处理之前给出此错误的所有请求,然后我在 api 中再次打印一些数据,它再次工作。是不是很奇怪?
    • 伟大的 Nathan 很多时候它依赖于 API 设置来了解一切是否应该按预期工作
    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多