【发布时间】:2018-01-20 18:26:25
【问题描述】:
我想做一个upvote 功能。我有一些使用 Firebase 存储在数据库中的帖子。我想让人们对帖子投赞成票(或反对票)。
这是在我的 ctrl 中:
upvote(advice) {
advice.votes = advice.votes + 1;
return this.httpService.updateData(advice)
.subscribe((res:Response) => {
console.log('in subscribe', res);
});
}
在我的服务中:
updateData (data:any): Observable<any> {
let datas = JSON.stringify(data);
const headers = { 'Authorization': 'secret' };
return this.http.put(this.url + 'data.json', datas, headers)
.catch((e) => {
console.log(e);
})
.finally(() => {
console.log('finally');
})
}
当我在控制器内的 subscribe 方法中检查响应时,我可以看到更新的值,但我的数据库现在已被破坏。
之前:
之后:
如您所见,之后不再有实物,它取代了一切。 我想我必须更改网址或检查帖子 ID,但我不知道该怎么做。 我在 firebase 文档中没有找到任何内容。所以如果有人有想法..
@Luke 回答后编辑
我这样更新了我的代码:
在我的 ctrl 中:
upvote(advice) {
advice.votes = advice.votes + 1;
return this.httpService.updateData(advice)
.subscribe((res:Response) => {
console.log(res);
return res;
})
}
在服务中:
getId() {
this.db.list('data').snapshotChanges().map(actions => {
return actions.map(action => ({ key: action.key, ...action.payload.val() }));
}).subscribe(items => {
return items.map(item => item.key);
});
}
updateData (data:any): Observable<any> {
let updateUrl = this.url + '-p1FFxUqY6u1_AZ3ER4eVUt';
let datas = JSON.stringify(data);
const headers = { 'Authorization': 'secret' };
return this.http.put(updateUrl + 'data.json', datas, headers)
.catch((e) => {
console.log(e);
})
.finally(() => {
console.log('finally');
})
}
我可以在日志和前面看到投票计数器更新,但在数据库中看不到。当我刷新页面时,投票又回到 0。 我想我只是忘记了什么..
【问题讨论】:
标签: javascript angular http firebase firebase-realtime-database