猿问

使用 VueJS 将 JSON 发布到本地主机 Go 后端时的 EOF

我正在使用 VueJS 用于前端和 Go 用于后端设置登录系统。我目前陷入了以JSON格式将用户名和密码发布到后端的困境。


目前,在早些时候与 Axios 运气不好之后,我正在尝试使用 fetch 发布。


发布方法:


fetch("http://localhost:9444/login", {

                    method: "post",

                    headers: {

                        'Accept': 'application/json',

                        'Content-Type': 'application/json'

                    },


                    body: JSON.stringify({

                        "emailAddress": "myName",

                        "password": "myPassword"

                    })

                })

                .then( (response) => { 

                console.log(response)

                });

然后我在后端路由,例如:


r := mux.NewRouter().StrictSlash(true)

r.HandleFunc("/login", models.LoginHandler(db)).Methods("POST", "OPTIONS")

登录处理程序:


func LoginHandler(db *sql.DB) func(w http.ResponseWriter, req *http.Request) {

    return func(w http.ResponseWriter, req *http.Request) {

        // w.Header().Set("Access-Control-Allow-Origin", "*")

        // w.Header().Set("Access-Control-Allow-Headers", "*")

        w.Header().Set("Content-Type", "application/json; charset=utf-8")

        w.Header().Set("Access-Control-Allow-Origin", "*")


        // Initialize loginInfo

        loginInfo := LoginInfo{}


        // Decode request body using JSON

        err := json.NewDecoder(req.Body).Decode(&loginInfo)

        if err != nil {

            panic(err)

        }


        println(loginInfo.EmailAddress)

        println(loginInfo.Password)


        w.WriteHeader(http.StatusOK)

        w.Write([]byte("Test message."))

    }

}

目前导致解码部分崩溃,如下所示:


2019/11/12 14:45:53 http: panic serving [::1]:57224: EOF

goroutine 35 [running]:

net/http.(*conn).serve.func1(0xc000196000)

        c:/go/src/net/http/server.go:1769 +0x140

panic(0x8be000, 0xc00005c050)

        c:/go/src/runtime/panic.go:522 +0x1c3

_/H_/Development/clientportal/backend/models.LoginHandler.func1(0x9f7360, 0xc0001be000, 0xc0001a8200)

...

什么可能导致持续 EOF 错误?我已经使用邮递员测试(并确认了正确的功能):


{

    "emailAddress": "login",

    "password": "passw"

}

正确返回状态 200。


LEATH
浏览 100回答 1
1回答

www说

我通过在后端使用以下代码添加来接受 OPTIONS 来使其工作。路由:r.HandleFunc("/login", models.LoginCORSHandler()).Methods("OPTIONS")处理器:// LoginCORSHandler handle OPTIONS requestfunc LoginCORSHandler() func(w http.ResponseWriter, req *http.Request) {    return func(w http.ResponseWriter, req *http.Request) {        w.Header().Set("Access-Control-Allow-Origin", "*")        w.Header().Set("Access-Control-Allow-Methods", "POST")        w.Header().Set("Access-Control-Allow-Headers", "Content-Type")        w.WriteHeader(http.StatusOK)    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答