向Golang API发出发送JSON和严格定义的JSON的请求
在向Golang API发出向Golang API发出发送JSON和严格定义的JSON的请求,json,go,post,gorilla,mux,Json,Go,Post,Gorilla,Mux,在向Golang API发出POST请求时,如果我发送stringy-fiedJSON数据,它将返回成功,但当我发送JSON数据时,它将返回错误,状态为403 请帮助我理解此行为,以及如何使用POST请求方法发送JSON数据 文件:main.go package main import ( "devmgmtv2/auth" "github.com/gorilla/handlers" "github.com/gorilla/mux" "log" "net/
POST
请求时,如果我发送stringy-fiedJSON
数据,它将返回成功,但当我发送JSON
数据时,它将返回错误,状态为403
请帮助我理解此行为,以及如何使用POST
请求方法发送JSON
数据
文件: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)
}
}
将JSON发送到任何http服务器时,始终必须使用
JSON.stringify()
不这样做将导致发送[object object]
。。。
有一些客户端库为您完成这种繁重的工作,但在幕后JSON总是作为字符串发送
Node.JS以同样的方式处理它。。。它接收字符串表示,通常对传入请求运行类似body的解析器,以从字符串中提取JSON。因此,它可能在幕后发生,但仍然会发生。当向任何http服务器发送JSON时,您必须始终使用
JSON.stringify()
不这样做将导致发送[object object]
。。。
有一些客户端库为您完成这种繁重的工作,但在幕后JSON总是作为字符串发送
Node.JS以同样的方式处理它。。。它接收字符串表示,通常对传入请求运行类似body的解析器,以从字符串中提取JSON。因此,它可能在幕后发生,但仍然会发生。什么是“当我以字符串格式传递JSON时,即原始文本,但当它发送JSON时,它工作”的意思?JSON是一种文本格式,总是以“字符串”或“文本”的形式发送。你到底做了什么?当我在执行JSON.stringify(数据)之后发送数据时,它工作了,但当我按原样发送数据时。它不起作用了。但是它过去与NodeJS服务器一起工作。听起来你的客户端代码没有生成JSON,那么,你的Go也没有问题。@Flimzy这是我的身体数据->让数据={“用户”:用户,“密码”:密码}如果你想使用JSON,你必须发送JSON。我不知道Node如何序列化任意对象。所以:只发送JSON(而不是随机垃圾)。什么是“当我以字符串格式传递JSON(即原始文本)时有效,但当它发送JSON时有效”的意思?JSON是一种文本格式,总是以“字符串”或“文本”的形式发送。你到底做了什么?当我在执行JSON.stringify(数据)之后发送数据时,它工作了,但当我按原样发送数据时。它不起作用了。但是它过去与NodeJS服务器一起工作。听起来你的客户端代码没有生成JSON,那么,你的Go也没有问题。@Flimzy这是我的身体数据->让数据={“用户”:用户,“密码”:密码}如果你想使用JSON,你必须发送JSON。我不知道Node如何序列化任意对象。所以:只需发送JSON(而不是随机垃圾)。