mongodb - 去不正确解释http请求

标签 mongodb go

我连接了一个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/

相关文章:

javascript - 如何维护 mongodb 中用户可定制的实体顺序?

mysql - MongoDB 选择为?

mongodb - grails mongo排序查询,键为变量

postgresql - 使用 gorm 更新 postgres 表

Go Refllect 声明类型结构

mongodb - 如何使用 mongodb 验证器验证对象数组?

mongodb - 是否可以从 MongoDB 查询中返回计算字段?

file-io - 如何使用 "compress/gzip"包来 gzip 文件?

go - struct{} 和 struct{}{} 在 Go 中如何工作?

python - 在 Go 中创建哈希