Не могу правильно отправить комментарии в массив в мангусте - PullRequest
0 голосов
/ 13 июня 2018

Так что я создаю это приложение, которое позволяет пользователям оставлять комментарии.

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

Вот мой экспресс-маршрут для комментария:

.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 голосов
/ 13 июня 2018

ваша функция обновления будет выглядеть так, как показано ниже (вам не нужно указывать в качестве аргумента 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);
        })
})

для получения дополнительной информации о обновлении для получения дополнительной информации о $ push

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