Возврат пустого массива постов при использовании mon goose populate - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь получить сообщения конкретного пользователя. Это возвращает мне пустой массив сообщений. Вот мой код Я думаю, что я все правильно сослался, должна быть какая-то ошибка.

User model

const Schema = mongoose.Schema

const userSchema = new Schema({
    username: { type: String, required: true },
    email: { type: String, reuired: true },
    password: { type: String, required: true },
    posts:[{ type: Schema.Types.ObjectId, ref: "Post" }]
}, { timestamps: true })

Post model

const Schema = mongoose.Schema;

const postSchema = new Schema({
  title: { type: String, required: true },
  content: { type: String, required: true },
  user: { type: Schema.Types.ObjectId, ref: "User" },
}, { timestamps: true }

router.get("/posts/:id", usersController.getUserPosts)

    getUserPosts: (req, res) => {
        User.findById(req.params.id, async (err, user) => {
            if (err) {
                return res.status(500).json({ error: "Server error" })
            } else if (!user) {
                return res.status(400).json({ error: "No user" })
            } else if (user) {
                user = await User.populate("user", {
                  path: "posts",
                  model: "Post"
              })
            return res.status(200).json({ user })
         }
      })
    }

Редактировать

Пользователи в базе данных:

/users/list

{
    "users": [
        {
            "posts": [],
            "_id": "5e66496fcaf5d6697ca3fdbc",
            "username": "JimmyPage",
            "email": "jimmypage@gmail.com",
            "password": "$2b$10$mu0IcHADj5YVIT/66EEfPOxL3cvEjqDsnJUcrST8ZcatTOcQ42kn6",
            "createdAt": "2020-03-09T13:49:35.834Z",
            "updatedAt": "2020-03-09T13:49:35.834Z",
            "__v": 0
        },
        {
            "posts": [],
            "_id": "5e66499fcaf5d6697ca3fdbe",
            "username": "AxlRose",
            "email": "axlrose@gmail.com",
            "password": "$2b$10$H3X3efz02RonlvNXaRPr2eEbflSiFK1ITFdbyT2igUGDK9gDpIJqO",
            "createdAt": "2020-03-09T13:50:23.702Z",
            "updatedAt": "2020-03-09T13:50:23.702Z",
            "__v": 0
        }
    ]
}

Посты выглядят так:

/posts/list

{
    "posts": [
        {
            "_id": "5e66498ccaf5d6697ca3fdbd",
            "title": "Jimmy Page's post",
            "description": "This is Jimmy Page's post",
            "user": {
                "posts": [],
                "_id": "5e66496fcaf5d6697ca3fdbc",
                "username": "JimmyPage",
                "email": "jimmypage@gmail.com",
                "password": "$2b$10$mu0IcHADj5YVIT/66EEfPOxL3cvEjqDsnJUcrST8ZcatTOcQ42kn6",
                "createdAt": "2020-03-09T13:49:35.834Z",
                "updatedAt": "2020-03-09T13:49:35.834Z",
                "__v": 0
            },
            "createdAt": "2020-03-09T13:50:04.840Z",
            "updatedAt": "2020-03-09T13:50:04.840Z",
            "__v": 0
        },
        {
            "_id": "5e6649b5caf5d6697ca3fdbf",
            "title": "Axl Rose's Post",
            "description": "This is Axl Rose's Post",
            "user": {
                "posts": [],
                "_id": "5e66499fcaf5d6697ca3fdbe",
                "username": "AxlRose",
                "email": "axlrose@gmail.com",
                "password": "$2b$10$H3X3efz02RonlvNXaRPr2eEbflSiFK1ITFdbyT2igUGDK9gDpIJqO",
                "createdAt": "2020-03-09T13:50:23.702Z",
                "updatedAt": "2020-03-09T13:50:23.702Z",
                "__v": 0
            },
            "createdAt": "2020-03-09T13:50:45.751Z",
            "updatedAt": "2020-03-09T13:50:45.751Z",
            "__v": 0
        },
        {
            "_id": "5e664b7bf120ab6c0d9999c9",
            "title": "Jimmy Page's second post",
            "description": "This is Jimmy Page's second post\n\n",
            "user": {
                "posts": [],
                "_id": "5e66496fcaf5d6697ca3fdbc",
                "username": "JimmyPage",
                "email": "jimmypage@gmail.com",
                "password": "$2b$10$mu0IcHADj5YVIT/66EEfPOxL3cvEjqDsnJUcrST8ZcatTOcQ42kn6",
                "createdAt": "2020-03-09T13:49:35.834Z",
                "updatedAt": "2020-03-09T13:49:35.834Z",
                "__v": 0
            },
            "createdAt": "2020-03-09T13:58:19.261Z",
            "updatedAt": "2020-03-09T13:58:19.261Z",
            "__v": 0
        }
    ]
}

Я добавил вышеуказанный код в свой вопрос. Я застрял в этом навсегда, как будто я пытаюсь показать сообщения пользователя в его профиле, а также планирую показать глобальный фид всех сообщений пользователя, показывающих.

Было бы здорово, если бы вы могли мне помочь вне. Я действительно ценю это. СПАСИБО.

Список сообщений контроллера выглядит следующим образом:

listposts:  (req, res) => {
    Post.find({}, async (error, posts) => {
        if (error) {
            return res.status(500).json({ error: "something went wrong" })
        } else if (!posts) {
            return res.status(400).json({ msg: "sorry no posts" })
        } else if (posts) {
            posts = await Post.populate(posts, {
              path: 'user',
              model: 'User'
            });
            return res.status(200).json({ posts })
        }
    })
}

Документ пользователя:

{
     "_id" : ObjectId("5e66496fcaf5d6697ca3fdbc"),
      "posts" : [ ],
      "username" : "JimmyPage",
      "email" : "jimmypage@gmail.com",
      "password" : "$2b$10$mu0IcHADj5YVIT/66EEfPOxL3cvEjqDsnJUcrST8ZcatTOcQ42kn6",
      "createdAt" : ISODate("2020-03-09T13:49:35.834Z"),
      "updatedAt" : ISODate("2020-03-09T13:49:35.834Z"), "__v" : 0 
}

{ 
    "_id" : ObjectId("5e66499fcaf5d6697ca3fdbe"),
     "posts" : [ ],
     "username" : "AxlRose",
     "email" : "axlrose@gmail.com",
     "password" : "$2b$10$H3X3efz02RonlvNXaRPr2eEbflSiFK1ITFdbyT2igUGDK9gDpIJqO",
     "createdAt" : ISODate("2020-03-09T13:50:23.702Z"),
     "updatedAt" : ISODate("2020-03-09T13:50:23.702Z"),
     "__v" : 0 
}

И документ сообщения:

{ 
    "_id" : ObjectId("5e66498ccaf5d6697ca3fdbd"),
    "title" : "Jimmy Page's post",
    "description" : "This is Jimmy Page's post",
    "user" : ObjectId("5e66496fcaf5d6697ca3fdbc"),
    "createdAt" : ISODate("2020-03-09T13:50:04.840Z"),
    "updatedAt" : ISODate("2020-03-09T13:50:04.840Z"),
    "__v" : 0 
}


{
     "_id" : ObjectId("5e6649b5caf5d6697ca3fdbf"),
     "title" : "Axl Rose's Post",
     "description" : "This is Axl Rose's Post",
     "user" : ObjectId("5e66499fcaf5d6697ca3fdbe"),
     "createdAt" : ISODate("2020-03-09T13:50:45.751Z"),
     "updatedAt" : ISODate("2020-03-09T13:50:45.751Z"),
     "__v" : 0 }


{
     "_id" : ObjectId("5e664b7bf120ab6c0d9999c9"),
     "title" : "Jimmy Page's second post",
     "description" : "This is Jimmy Page's second post\n\n",
     "user" : ObjectId("5e66496fcaf5d6697ca3fdbc"),
     "createdAt" : ISODate("2020-03-09T13:58:19.261Z"),
     "updatedAt" : ISODate("2020-03-09T13:58:19.261Z"), 
     "__v" : 0 
}

1 Ответ

2 голосов
/ 09 марта 2020

Вы можете использовать следующий метод для получения информации о пользователе и его / ее сообщениях.

getUserPosts: async (req, res) => {
  try {
    const user = await User.findById(req.params.id).populate("posts");

    if (!user) {
      return res.status(400).json({ error: "No user" });
    }

    return res.status(200).json({ user });
  } catch (err) {
    return res.status(500).json({ error: "Server error" });
  }
};
...