微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使我启用了 localhost

如何解决即使我启用了 localhost

我正在运行 Go 服务器并通过 React.js 中的 Axios 发出 POST 请求。 我似乎已经尝试了我能够找到的 StackOverflow 上的几乎所有内容,但由于某种原因,它仍然无法正常工作。

这是我的服务器代码(我一直在使用 /test 端点进行测试:

func main() {

    r := mux.NewRouter()

    r.HandleFunc("/api/patients",getPatients).Methods("GET")
    r.HandleFunc("/api/patients",createPatient).Methods("POST")
    r.HandleFunc("/api/login",validateAdmin).Methods("POST")
    r.HandleFunc("/test",testPOST).Methods("POST","OPTIONS")

    // set up server on port 8000
    log.Fatal(http.ListenAndServe(":8080",handlers.CORS(handlers.AllowedHeaders([]string{"X-Requested-With","Content-Type","Authorization"}),handlers.AllowedMethods([]string{"GET","POST","PUT","HEAD","OPTIONS"}),handlers.AllowedOrigins([]string{"http://localhost:3000"}))(r)))
}

// Test POST requests
func testPOST(w http.ResponseWriter,r *http.Request) {
    w.Header().Set("Content-Type","application/json")
    w.Header().Set("Access-Control-Allow-Origin","*")

    decoder := json.NewDecoder(r.Body)

    // irrelevant code that retrieves data from MysqL
    // irrelevant code that retrieves data from MysqL
    // irrelevant code that retrieves data from MysqL 

    w.WriteHeader(http.StatusOK)

    // encode inserted patient as json and send back
    json.NewEncoder(w).Encode(patient)

}

这是我发出 POST 请求的方式:

function submitData(event) {
        console.log("SUBMITTED FORM DATA");
        event.preventDefault(); // prevent from page refreshing
        const patient = {
            name: name,dob: dob,phone: phone,email: email,address: address
        };

        // send post request to API
        axios.post('http://localhost:8080/test',{ patient },{headers: {'Access-Control-Allow-Origin': '*'}},{ crossdomain: true })
            .then (res => {
                console.log(res);
                console.log(res.data);
            })
        event.preventDefault(); // prevent from page refreshing
    }

我的错误信息:

从源 'http://localhost:3000' 访问 XMLHttpRequest at 'http://localhost:8080/test' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 '请求的资源上存在 Access-Control-Allow-Origin 标头。

非常感谢任何帮助!

解决方法

我通过浏览器在我的机器上进行了测试,很想检查更新的 Allowedmethod 'PATCH'。

package main

import (
    "log"
    "net/http"
    "github.com/gorilla/mux"
    "github.com/rs/cors"
)
func main() {
    r := mux.NewRouter()
    r.HandleFunc("/api/patients",getPatients).Methods("GET")
    r.HandleFunc("/api/patients",createPatient).Methods("POST")
    r.HandleFunc("/api/login",validateAdmin).Methods("POST")
    r.HandleFunc("/test",testPOST).Methods("POST","OPTIONS")

    cors := cors.New(cors.Options{
        AllowedOrigins: []string{"*"},AllowedHeaders: []string{"Content-Type","Content-Length","Accept-Encoding","X-CSRF-Token","Authorization"},AllowedMethods: []string{"GET","PATCH","POST","PUT","OPTIONS","DELETE"},})
    srv := &http.Server{
        Handler:      cors.Handler(r),Addr:         ":8080",WriteTimeout: 1 * time.Minute,ReadTimeout:  1 * time.Minute,}
    log.Fatal(srv.ListenAndServe())
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。