向Golang API发送请求以发送JSON和stringy-fied JSON

时间:2017-12-20 08:40:09

标签: json go post gorilla mux

在向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)
    }
}

1 个答案:

答案 0 :(得分:4)

将JSON发送到任何http服务器时,您必须始终使用JSON.stringify()

不这样做会导致发送[object Object] ... 有些客户端库会为您做这种繁重的工作,但在幕后,JSON总是以字符串形式发送。

Node.JS以相同的方式处理它...它接收字符串表示,并且通常在传入请求上运行诸如正文解析器之类的东西以从字符串中提取JSON。所以它可能会在幕后发生,但它仍然会发生。