Json Axios放置请求不工作,但获取工作

Json Axios放置请求不工作,但获取工作,json,reactjs,go,axios,Json,Reactjs,Go,Axios,我正在对我(在Golang中)创建的API进行axios调用。 API在Postman上的工作似乎与预期的一样,但由于某种原因,当我通过React进行调用时,它不起作用 import React, {Component} from "react"; import Form from "./Form"; import Header from "./Header"; import axios from "axios";

我正在对我(在Golang中)创建的API进行axios调用。 API在Postman上的工作似乎与预期的一样,但由于某种原因,当我通过React进行调用时,它不起作用

import React, {Component} from "react";
import Form from "./Form";
import Header from "./Header";
import axios from "axios";

let endpoint = "http://localhost:8000/";

class Dashboard extends Component {
    constructor(props){
        super(props)
        this.state = {
            currentRepository: '',
            data: {},
        }
        this.setRepository = this.setRepository.bind(this)
    }
    
    componentDidMount(){
        axios.get(
            endpoint,
            {
            headers: {
              "Content-Type": "application/json"
            }
          }
        )
        .then(res => {
          console.log(res);
        });
    }

    setRepository(url){
        console.log(url)
        this.setState({
            currentRepository: url,
        }, () => {
            axios.put(
                endpoint, 
                this.state.currentRepository, {
                headers: {
                  "Content-Type": "application/json"
                }
              }
            )
            .then(res => {
              this.setState({
                  data: res
              })
              console.log(res);
            })
        })
    }

    render(){
        return (
            <div className="m-5 border-2">
                <Header></Header>
                <Form setRepository={this.setRepository}></Form>
            </div>
        )
    }
}

export default Dashboard;
我不明白问题出在哪里,一点帮助就太好了。多谢各位

更新:


将PUT替换为POST works。但仍然无法理解为什么PUT不起作用。

CORS会将选项请求发送到任何URL,因此要处理POST请求,您首先需要处理指向该URL的选项请求。 在GET端点上,这不是问题,但它适用于POST、PUT和DELETE请求


您可以检查此post

CORS是否会向任何URL发送飞行前请求,因此要处理post请求,您首先需要处理同一URL的选项请求。 在GET端点上,这不是问题,但它适用于POST、PUT和DELETE请求


你可以查看这篇文章

这肯定是CORS的问题。不支持CORS的GET和POST。但PUT、PATCH、DELETE需要飞行前请求,并在golang服务器上设置COR

如果您查看网络控制台中的错误,它也会显示-1。它已被CORS策略2阻止。不允许使用方法PUT

下面是一个很好的安装到api中并在端点上启用CORS的包:
这绝对是一个CORS问题。不支持CORS的GET和POST。但PUT、PATCH、DELETE需要飞行前请求,并在golang服务器上设置COR

如果您查看网络控制台中的错误,它也会显示-1。它已被CORS策略2阻止。不允许使用方法PUT

下面是一个很好的安装到api中并在端点上启用CORS的包:

卸载后,我在系统上重新安装了NodeJS,同样的代码现在似乎可以工作了。
我在WSL Ubuntu上,所以这可能是他们那边的一个bug

卸载后,我在我的系统上重新安装了NodeJS,同样的代码现在似乎可以工作了。
我在WSL Ubuntu上,所以这可能是他们那边的一个bug

您可以在前端的标题中尝试此操作吗:
访问控制允许方法:POST、PUT、GET、OPTIONS
我将其添加到axios的标题中,但随后GET也停止工作我的坏
访问控制允许方法
是响应标题。这是行不通的。试试这个:```axios.get(url,{crossdomain:true})```如果不使用其返回值,
corsmethodwidleware
调用的目的是什么?因为它现在没有任何效果,所以不清楚您认为代码应该做什么。@ShubhamVerma不起作用。GET和PUT的工作原理与以前完全相同。您可以在前端的标题中尝试此操作吗:
访问控制允许方法:POST、PUT、GET、OPTIONS
我将其添加到axios的标题中,但GET也停止了工作我的坏
访问控制允许方法
是响应标题。这是行不通的。试试这个:```axios.get(url,{crossdomain:true})```如果不使用其返回值,
corsmethodwidleware
调用的目的是什么?因为它现在没有任何效果,所以不清楚您认为代码应该做什么。@ShubhamVerma不起作用。两者的获取和放置工作与以前完全相同。
func getHome(w http.ResponseWriter, r *http.Request) {
    commitTimeStamps := getCommitTimeStamps(currentRepository)
    commitTimeObjects := parseTimeStamps(commitTimeStamps)

    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Methods", "GET")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

    _ = json.NewEncoder(w).Encode(commitTimeObjects)
}



func updateRepository(w http.ResponseWriter, r *http.Request) {
    var url struct {
        URL string `json:"url"`
    }
    _ = json.NewDecoder(r.Body).Decode(&url)
    currentRepository = parseURL(&url.URL)
    
    // currentRepository looks like {bradtraversy reactcharts}
    commitTimeStamps := getCommitTimeStamps(currentRepository)
    commitTimeObjects := parseTimeStamps(commitTimeStamps)
    // commitTimeObjects looks like [{2016-04-21 2} {2016-04-23 5} {2016-04-25 1}]
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Methods", "PUT")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

    _ = json.NewEncoder(w).Encode(commitTimeObjects)
}

func main() {
    router := mux.NewRouter()
    router.Use(mux.CORSMethodMiddleware(router))
    router.HandleFunc("/", getHome).Methods("GET", "OPTIONS")
    router.HandleFunc("/", updateRepository).Methods("PUT", "OPTIONS")

    http.ListenAndServe(":8000", router)
}