Mongodb 无法正确解释http请求
我连接了一个mongoDb实例,我的请求(来自我的React应用程序)得到了一个200的回复。我可以将Mondodb中的收藏视为“猫”,每只猫都有一个记录,但猫的记录如下所示:Mongodb 无法正确解释http请求,mongodb,go,Mongodb,Go,我连接了一个mongoDb实例,我的请求(来自我的React应用程序)得到了一个200的回复。我可以将Mondodb中的收藏视为“猫”,每只猫都有一个记录,但猫的记录如下所示: _id:5f66641bad25efa40b810d83 - fine name:"" - should not be blank favorite:false -should be true 起初我遇到了一些cors问题,所以我将“内容类型”更改为“内容类型”(用于访问控制允许标题),并且“修复”
_id:5f66641bad25efa40b810d83 - fine
name:"" - should not be blank
favorite:false -should be true
起初我遇到了一些cors问题,所以我将“内容类型”更改为“内容类型”(用于访问控制允许标题),并且“修复”了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对象的成员键:
类型CatModel结构{
Cat结构{
ID primitive.ObjectID`json:“\u ID,ommitempty”bson:“\u ID,ommitempty”`
名称字符串`json:“名称”`
收藏夹bool`json:“收藏夹”`
}`json:“猫”`
}
此外,标题名称中也有打字错误(上下文类型
,而不是内容类型
)。正确的Header()。Set()
是:
w.Header().Set("Content-Type", "application/json; charset=utf-8")
您正在设置上下文类型,而不是内容类型。不要忽略解码返回的错误。您必须将Cat类型包装在包含Cat字段的结构中@Peter虽然我完全同意您的观点,但OP不应忽略任何错误,在这种情况下,我相信错误将是
,并且不会在这里保存灵魂,因为包装JSON对象将被视为适合Cat
(没有匹配的键)。我相信他们得到了{false}
,因为在包装JSON对象中找不到Cat
中定义的Favorite
字段。