代码之家  ›  专栏  ›  技术社区  ›  Rishabh Jain

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

  •  1
  • Rishabh Jain  · 技术社区  · 7 年前

    在制作 POST 请求Golang API,如果我发送stringy-fied JSON 数据返回成功,但当我发送 JSON 返回错误的数据 status 403 .

    请帮助我了解这种行为以及如何发送 JSON 数据使用 发布 请求方法。

    文件:main。去

    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 回复  |  直到 6 年前
        1
  •  4
  •   Kevin Sandow    7 年前

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

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


    节点。JS以同样的方式处理它。。。它接收字符串表示,通常在传入请求上运行类似于主体解析器的东西,以从字符串中提取JSON。所以这可能发生在幕后,但它仍然会发生。