Попытка заполнить пользовательский документ информацией о публикации, но у меня есть только тот идентификатор пользователя, который я нажал вручную - PullRequest
0 голосов
/ 17 января 2020

поэтому я пытаюсь получить заголовок сообщения, так как при отображении массива сообщений, сделанных на панели пользователя, я могу показывать идентификатор сообщения только при перенаправлении их, это работает ... но я думаю, было бы более разумно иметь НАЗВАНИЕ вместо этого. Население, кажется, не помещает объект * * * в массив, возможно, я неправильно понимаю население, или есть лучший способ go об этом ... спасибо.

enter image description here

это код реакции для этого списка

                <ol>
                    { user ? user.posts.map((item,i) => (
                    <React.Fragment key ={i}>
                            <li><Link to={`/api/posts/item/${item}`}>{item}</Link></li>
                            <button onClick={() => { setId(item) }}>Delete this post</button>
                    </React.Fragment>
                )) : null }
                </ol>

это внутренний код, который дал мне идентификатор пользователя, и заполнить f (n)

        userModel.findOne({ email: req.body.author }, function(error, user) {

            const locationURL = req.files.map((item) => item.location);

            postModel.create({ ...req.body, image: locationURL }, (error, returnedDocuments) => {
                if (error) {
                    throw new Error(error);
                }

                user.posts.push(returnedDocuments._id);
                user.save((err) => {
                    console.log(err);
                });
            });

            // this will populate the posts field in our userSchema (which contain the id references to our posts)

            userModel.findOne({ email: req.body.author }).populate('posts').exec((err, user) => {
                user.save((err) => {
                    console.log(err);
                });
            });
        });

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

[
    {
        "premium": false,
        "max_posts": 62,
        "posts_made": 57,
        "posts": [
            "5e21252ac51ac82838947875",
            "5e212a6c3b1619294832a3f2"
        ],
        "_id": "5e0fe3f33c2edb2f5824ddf2",
        "email": "myemail@gmail.com",
        "createdAt": "2020-01-04T01:01:39.840Z",
        "updatedAt": "2020-01-17T03:36:36.086Z",
        "__v": 22
    }
]

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

let User = new Schema(
    {
        email: {
            type: String,
            unique: true
        },
        premium: {
            type: Boolean,
            default:false
        },
        max_posts: {
            type: Number,
            default:3
        },
        posts_made: {
            type: Number,
            default:0
        },
        posts: [
            {
                type: mongoose.Schema.Types.ObjectId,
                ref: 'Post'
            }
        ]
    },
    {
        timestamps: true
    }
);

Должен ли я просто вызвать запрос топора ios, чтобы получить имена тех удостоверений личности, которые у меня есть, у меня была такая мысль, но я подумал это могут быть необоснованные обращения к БД, которые могут стать дорогими. Спасибо.

1 Ответ

0 голосов
/ 17 января 2020

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

    postModel.create({ ...req.body, image: locationURL }, (error, returnedDocuments) => {
        if (error) {
            throw new Error(error);
        }

        user.posts.push(returnedDocuments._id);

        user.save((err) => {
            if (err) {
              console.log(err);
              throw new Error(err);
            }

            userModel.findOne({ email: req.body.author }).populate('posts').exec((err, user) => {
              if (err) {
                console.log(err);
                throw new Error(err);
              }

              res.send(user); //user will have posts populated 
          });
        });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...