无法在mongoose

时间:2018-06-13 01:17:45

标签: javascript mongodb reactjs mongoose redux

所以我正在构建这个允许用户发表评论的应用程序。

我遇到了一个问题,当我尝试发表评论时,它实际上并没有添加到已经存在的评论中它只是替换已经存在的评论。我不确定这是怎么回事。

以下是评论的快递路线:

.put((req, res) => {
        Issue.findByIdAndUpdate(req.params.id, req.body, {$push: {comments: req.body.comments}}, (err, updatedComment) => {
            if(err) return res.status(500).send(err);
            return res.send(updatedComment);
        })
    })

这是我的Redux,我正在使用相同的动作创建器来编辑帖子以添加注释:

export const getIssues = () => {
    return dispatch => {
        axios.get("/issues").then(response => {
            dispatch({
                type: "GET_ISSUES",
                issues: response.data
            })
        }).catch(err => {
            console.log(err);
        })
    }
}
export const editIssue = (editedIssue, id) => {
    return dispatch => {
        axios.put(`/issues/${id}`, editedIssue).then(response => {
            dispatch(getIssues());
        }).catch(err => {
            console.log(err);
        })
    }
}

const reducer = (state = [], action) => {
    switch(action.type){
        case "GET_ISSUES":
            return action.issues
        default:
            return state
    }
}

这是添加注释和onClick方法的表单:

addComment = () => {
        this.props.editIssue({
            comments: this.state.comment
        }, this.props.id)
    }
<button onClick={this.toggleComment}>Add A Comment</button>
                {this.state.isCommenting ? <form>
                    <input type="text" value={this.state.comment} name="comment" placeholder="Add A Comment..." onChange={this.handleChange}/>
                    <button onClick={this.addComment}>Submit</button>
                </form>: null}

最后我的帖子为帖子:

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

const issuesSchema = new Schema({
    issue: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: true,
    },
    comments: [String]
})

module.exports = mongoose.model("Issues", issuesSchema);

如果我的代码中还有其他内容您想要查看,请告诉我。我故意省略了一些代码,因为我觉得这篇文章已经很长了。

1 个答案:

答案 0 :(得分:0)

你的更新功能如下,(你不必因为它而将req.body作为参数,它正在更新现有的)

.put((req, res) => {
        Issue.findByIdAndUpdate(req.params.id, {$push: {comments: req.body.comments}}, (err, updatedComment) => {
            if(err) return res.status(500).send(err);
            return res.send(updatedComment);
        })
    })

了解有关findByIdAndUpdate

的更多信息

或尝试以下

.put((req, res) => {
    Issue.update({
        _id: req.params.id
    },
        {
            $push: {
                comments: req.body.comments
            }
        }, (err, updatedComment) => {
            if (err) return res.status(500).send(err);
            return res.send(updatedComment);
        })
})

了解有关update的更多信息 有关$push

的更多信息