我连接了一个mongoDb实例,并且我的请求(来自我的React应用程序)返回了200。我可以在Mondodb中看到该集合为“猫”,其中包含每只猫的记录,但猫记录如下所示:
_id:5f66641bad25efa40b810d83 - fine
name:"" - should not be blank
favorite:false -should be true
起初我遇到了一些cors问题,所以我将“Content-Type”更改为“content-type”(对于Access-Control-Allow-Header),并“修复”了cors问题。我不知道那是不是在破坏代码。由于这是我第一次自己建立数据库,所以我不确定在哪里破坏了代码。任何帮助,将不胜感激。
这是我的CreateCat方法:
func CreateCat(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Context-Type", "application/json; charset=utf-8")
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "POST")
w.Header().Set("Access-Control-Allow-Headers", "content-type")
var cat models.Cat
_ = json.NewDecoder(r.Body).Decode(&cat)
fmt.Println(cat)
insertOneFavoriteCat(cat)
json.NewEncoder(w).Encode(cat)
}
这是我的模型:type Cat struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
Name string `json:"name,string"`
Favorite bool `json:"favorite,string"`
}
这是println打印的内容:{ false}
如果您想知道这是否是我的前端,请发送以下请求:{"cat":{"name":"tabby","favorite":true}}
最佳答案
问题是JSON MongoDB返回的结果与您的结构解码方式不匹配。该false
来自Favorite
字段,该字段在MongoDB返回的cat
键的JSON对象中找不到。要解码这种类型的响应,您需要定义一个包装结构(在下面的示例中为CatModel
),因为您的Cat
并不是顶级对象,而仅仅是上层JSON对象的成员键:
type CatModel struct {
Cat struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
Name string `json:"name"`
Favorite bool `json:"favorite"`
} `json:"cat"`
}
另外,标题名称中也有错字(用Context-Type
代替Content-Type
)。正确的Header().Set()
是:w.Header().Set("Content-Type", "application/json; charset=utf-8")
关于mongodb - 去不正确解释http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63973472/