在向Golang API发出POST
请求时,如果我发送带有字符串的JSON
数据,则会返回成功但当我发送JSON
数据时,会返回status 403
错误
请帮助我了解此行为以及如何使用JSON
请求方法发送POST
数据。
档案:main.go
package main
import (
"devmgmtv2/auth"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"log"
"net/http"
)
func main() {
router := mux.NewRouter()
auth.AuthInit(router)
ssid.SsidInit(router)
headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
router.HandleFunc("/auth/login", Login).Methods("POST", "OPTIONS")
log.Fatal(http.ListenAndServe(":8000", handlers.CORS(headersOk, originsOk, methodsOk)(router)))
}
func Login(w http.ResponseWriter, r *http.Request) {
//Create User Struct
var user User
json.NewDecoder(r.Body).Decode(&user)
userPassword := getUserPassword(user.User)
// call get value for that user
// check for equality if true, return the structure
// if false return error
if user.Password == userPassword {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("success"))
} else {
http.Error(w, "Forbidden", http.StatusForbidden)
}
}
答案 0 :(得分:4)
将JSON发送到任何http服务器时,您必须始终使用JSON.stringify()
。
不这样做会导致发送[object Object]
...
有些客户端库会为您做这种繁重的工作,但在幕后,JSON总是以字符串形式发送。
Node.JS以相同的方式处理它...它接收字符串表示,并且通常在传入请求上运行诸如正文解析器之类的东西以从字符串中提取JSON。所以它可能会在幕后发生,但它仍然会发生。