今天使用angular(前端)+golang(后端)进行post,遇到如下错误:
http failure during parsing for127.0.0.1
大概意思是:解析时出现错误
找了一下帖子,大概原因是数据类型不对应,我的后端的代码是这样的
package main
import (
"net/http"
)
func cors(f http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域,可以换成具体url,注意仅具体url才能带cookie信息
w.Header().Add("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token") //header的类型
w.Header().Add("Access-Control-Allow-Credentials", "true") //设置为true,允许ajax异步请求带cookie信息
w.Header().Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") //允许请求方法
w.Header().Set("content-type", "application/json;charset=UTF-8") //返回数据格式是json
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusNoContent)
return
}
f(w, r)
}
}
func index(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello Golang"))
}
func main() {
http.HandleFunc("/", cors(index))
http.ListenAndServe(":8080", nil)
}
注意index()方法,"Hello Golang"并不是json数据
与w.Header().Set("content-type", "application/json;charset=UTF-8")
不一致,
改了后的代码如下
package main
import (
"encoding/json"
"net/http"
)
type Profile struct {
Name string
Hobbies []string
}
func cors(f http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域,可以换成具体url,注意仅具体url才能带cookie信息
w.Header().Add("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token") //header的类型
w.Header().Add("Access-Control-Allow-Credentials", "true") //设置为true,允许ajax异步请求带cookie信息
w.Header().Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") //允许请求方法
w.Header().Set("content-type", "application/json;charset=UTF-8") //返回数据格式是json
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusNoContent)
return
}
f(w, r)
}
}
func index(w http.ResponseWriter, r *http.Request) {
//w.Write([]byte("Hello Golang"))
profile := Profile{"Alex", []string{"snowboarding", "programming"}}
js, err := json.Marshal(profile)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(js)
}
func main() {
http.HandleFunc("/student", cors(index))
http.ListenAndServe(":8080", nil)
}
成功!
前端能收到数据了。
因为是调试,所以这里前端接受到的数据并没有意义。