Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 无法正确解释http请求_Mongodb_Go - Fatal编程技术网

Mongodb 无法正确解释http请求

Mongodb 无法正确解释http请求,mongodb,go,Mongodb,Go,我连接了一个mongoDb实例,我的请求(来自我的React应用程序)得到了一个200的回复。我可以将Mondodb中的收藏视为“猫”,每只猫都有一个记录,但猫的记录如下所示: _id:5f66641bad25efa40b810d83 - fine name:"" - should not be blank favorite:false -should be true 起初我遇到了一些cors问题,所以我将“内容类型”更改为“内容类型”(用于访问控制允许标题),并且“修复”

我连接了一个mongoDb实例,我的请求(来自我的React应用程序)得到了一个200的回复。我可以将Mondodb中的收藏视为“猫”,每只猫都有一个记录,但猫的记录如下所示:

_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
字段。