Для школы я делаю проект на Angular с конкретными целями, у нас не было много уроков, поэтому я все еще начинающий. Мой проект почти завершен, но я наткнулся на обновление моего документа в базе данных MongoDB.
Мой проект - это своего рода сайт сообщества, который вы можете сравнить с Reddit. Таким образом, можно также проголосовать за сообщение, сделанное пользователем.
Теперь дело в том, что я не могу поднять свой пост. Я получаю ошибку:
this._spell.toJSON is not a function.
Для обновления я использую вызов PUT, но я никогда не видел этого в классе, поэтому я искал его в Интернете и пытался реализовать его. Мой бэкэнд-звонок с Бессонницей работает, и моя Почта получает голосование. Но когда я пытаюсь вызвать API в своем интерфейсе, я получаю эту ошибку.
Я прочитал несколько веб-сайтов и через Stackoverflow, но все еще не нашел решения для моей проблемы.
Мой код
Код post.component, получающий событие:
upvote() {
this.post.upvote();
this._dndDataService.upvote(this.post.id, this.post).subscribe();
}
Post.Model, имеющая from и toJson
toJSON() {
return {
title: this._title,
originalPoster: this._originalPoster,
category: this._category,
comments: this._comments.map(i => i.toJSON()), //fixen indien null
spell: this._spell.toJSON(),
dateCreated: this._dateCreated,
votes: this._votes
}
}
static fromJSON(json: any): Post {
const post = new Post(
json.title,
json.originalPoster,
json.category,
json.spell,
json.dateCreated
);
post._id = json._id;
post._votes = json.votes;
post._comments = json.comments.map(Comment.fromJSON); //fixen indien null
return post;
}
Мой dndDataService вызывает мой бэкэнд, это почти то же самое, что и метод POST для создания сообщений. Я также использую map((p:any) : Post => Post.fromJSON(p))
, и здесь я не получаю ошибку, упомянутую выше.
upvote(id: string, post: Post): Observable<Post> {
const theUrl = `${this._appUrl}/post/${id}/vote`;
return this.http.put(theUrl, post)
.pipe(map((p:any) : Post => Post.fromJSON(p)));
}
Теперь приходит мой внутренний вызов, который получает сообщение целиком и обновляет базу данных. Я использую функцию router.param, чтобы получить сообщение с правильным идентификатором, это работает, поскольку я использую его для нескольких целей:
router.put('/API/post/:id/vote', function (req, res) {
Post.update({
$set: {
votes: req.post}
},
function (err, post) {
if(err)
res.send("Error updating post");
res.json(post);
})
});
Я даже послал своего учителя за помощью по обновлению этого кода, но он все равно не работает. Я очень надеюсь, что некоторые из вас смогут мне помочь.
Если вам нужен весь мой код, скажите, что вам нужно, и я обновлю свой пост.
Также можно найти мой код на: https://github.com/SFieuws/WebsiteDnd