为什么Mongoose将我的post对象添加到用户的收藏夹中?

时间:2018-07-15 09:14:25

标签: node.js mongodb reactjs express mongoose

我有将新帖子添加到用户架构的途径:

Router.route("/newpost").post(function(req, res) {
  UserSchema.findById(req.body.user).then((user) => {
    const id = function() {
      return (
        "_" +
        Math.random()
          .toString(36)
          .substr(2, 9)
      );
    };
    req.body.data.key = id();
    user.posts.unshift(req.body.data);
    user.save();
    res.send(user);
  });
});

这是我的用户架构:

const mongoose = require("mongoose")
const Schema = mongoose.Schema

const UserSchema = new Schema({
    name : {
        type: String
    },
    login : {
        type: String
    },
    posts : {
        type : Array
    },
    email : {
        type: String
    },
    password : {
        type: String
    },
})

module.exports = mongoose.model("UserSchema", UserSchema, "users")

因此,如您所见,我正在将新帖子推送到当前用户的posts数组中,但是Mongodb还将此帖子作为空对象保存到Users集合中。这是我推送新帖子时得到的: screenshot from the Robo 3T

如您所见,新帖子已添加到posts数组,但在我的用户对象下方也显示为空对象。 我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:2)

浏览your codebase之后,我想我已经知道发生了什么事,可以为您指明正确的方向。恐怕我对您的React应用程序的结构了解不足,无法提供修复程序。

问题发生在客户端,而不是服务器上


我使用postman向您的服务器本地实例发送了以下两个API请求:

POST /api/add
{
    "name": "sam",
    "password": "example",
    "login": "samholmes",
    "email": "sam@sam.com"
}
response
{
    "_id" : "5b4cb4a3dcf25c13bdd05f80",
    "friends" : [],
    "requests" : [],
    "posts" : [],
    "name" : "sam",
    "password" : "$2b$10$G65S4St8OZWrhf0mSu3mduVyZRpycT5TMP3unM2GTdfOTXJaeChXK",
    "login" : "samholmes",
    "email" : "sam@sam.com",
    "__v" : 0
}
POST /api/newpost
{
    "user": "5b4cb4a3dcf25c13bdd05f80",
    "data": {
        "key": null,
        "title": "Example title",
        "text": "Example content"
    }
}
response
{
    "friends": [],
    "requests": [],
    "posts": [
        {
            "key": "_2utqr2k53",
            "title": "Example title",
            "text": "Example content"
        }
    ],
    "_id": "5b4cb4a3dcf25c13bdd05f80",
    "name": "sam",
    "password": "$2b$10$G65S4St8OZWrhf0mSu3mduVyZRpycT5TMP3unM2GTdfOTXJaeChXK",
    "login": "samholmes",
    "email": "sam@sam.com",
    "__v": 0
}

Single item in Robo 3T

如您所见,它仅制作了一个用户项目,并将帖子添加到posts数组中(如您所愿)。这意味着服务器处理请求的方式没有问题,而是服务器在客户端中的某个地方发送了错误的请求。


好的,让我们使用React应用程序。登录后,输入以下详细信息,然后单击“提交”按钮。

React form Submit result network requests

嗯?刚刚完成了两个网络请求。我们想要的一个是/newpost,它可以用新帖子正确地更新用户,还可以更新另一个/add请求(这将添加一个新的空用户并引起您遇到的问题)。为什么会发送此邮件?

我已经挖了一点,似乎smart/Feed/NewPost:42是元凶:

this.props.newPost(data, _id);

这会导致React为您想要的API路由和您不需要的API路由调用handleSubmit


恐怕我现在无法弄清楚为什么此按钮会导致两个网络请求,但希望这足以将您指向正确的方向!