Проблема с добавлением комментария - PullRequest
0 голосов
/ 06 июля 2019

Я делаю API узла. Я застрял при добавлении комментария к истории.

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

Story.findOne(req.params.id, (err, foundstory) => {
        if(err){
            res.status(500).json({msg:err})
        }else{
            let comment = new Comment()
            comment.body = req.body.body
            comment.author = req.body.author
            console.log(foundstory)

            //save comment//
            comment.save((err, comment) => {
                if(err){
                    res.status(500).json({msg:err})
                }else{
                    //pushing comment to comments array (ref) in story
                    foundstory.comments.push(comment)
                    foundstory.save()
                    res.status(200).json({msg:"Comment saved"})
                
                }
            })
        }
    })

Схема истории

import mongoose from 'mongoose'
import User from './user'
import Comment from './comment'

const Schema = mongoose.Schema
const ObjectID = mongoose.Schema.Types.ObjectId 

const storySchema = new Schema({
    //subdoc ref from user 
    author: {type: ObjectID, ref: 'User'},
    //subdoc ref from comment
    comments: [{
        type: ObjectID,
        ref: 'Comment'
    }],
    //contents of story//
    title: {type: String, required: true},
    body: {type: String, required: true},
    date: {type: Date, default: Date.now()},
    tags: [{type: String}]
})

module.exports = mongoose.model('Story', storySchema)

Схема комментариев

import mongoose from 'mongoose'
import User from './user'
const Schema = mongoose.Schema
const ObjectID = mongoose.Schema.Types.ObjectId

const commentSchema = new Schema({
    body : {type: String, required: true},
    author: {type: ObjectID, ref: 'User'}
})

module.exports = mongoose.model('Comment', commentSchema)

У меня есть массив типа "Комментарий" в моей схеме "История". Я пытаюсь отправить эти комментарии в этот массив.

1 Ответ

0 голосов
/ 07 июля 2019

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

Story.findById(req.params.id, (err, foundstory) => {
    if (err) res.status(500).json({
        msg: err
    });
    else if (!foundStory) res.status(400).json({
        msg: "Story Not Found"
    });
    else {
        let comment = new Comment();
        comment.body = req.body.body;
        comment.author = req.body.author;

        //save comment//
        comment.save(async (err, comment) => {
            if (err) res.status(500).json({
                msg: err
            });
            else {
                foundstory.comments.push(comment._id);
                await foundstory.save();
                res.status(200).json({
                    msg: "Comment saved"
                })
            }
        })
    }
})

Я изменил метод findOne () с помощью findById () , также метод foundstory. save () является асинхронным вызовом, поэтому я использовал async \ await для обработки. Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...