我有一个组件,用于检查用户之前是否已投递了帖子。如果他们有,那么他们不能再次赞扬那个帖子。如果他们没有,那么他们被允许。Firebase .push()试图添加到数据库,但失败?
该代码适用于要添加的第一个用户。 Firebase会创建一个唯一的密钥,然后添加upVotedBy: userKey
。但是,如果我尝试以另一个用户身份登录并执行相同操作,它将不会为新用户添加记录。它也没有记录任何类型的错误。
如果我在查看Firebase的同时进行投票,它会尝试使用唯一键添加新记录,然后变红并将其收回。有任何想法吗?
编辑:我缩小了它,似乎如果已经有记录,任何记录,它不会添加它。它将添加第一个,但不会添加任何后续记录。
我的数据结构是这样的:
以下是部分:
handleUpVote: function(item){
var ref = new Firebase(rootUrl);
var authData = ref.getAuth();
if(authData){
var userKey = authData.uid;
console.log('this is userKey ' + userKey)
var stateCopy = Object.assign({}, item);
ref.child('items').child(this.props.keyNum).child('upVotedBy').once('value', function(snapshot){
snapshot.forEach(function(childSnapshot){
console.log('this is snapshot.key ' + childSnapshot.val().upVotedBy);
if(childSnapshot.val().upVotedBy === userKey){
this.setState({userUpvoted: true})
console.log('u already liked this')
}
}.bind(this))
}.bind(this)).then(function(){
if(this.state.userUpvoted === false){
console.log('okay u can like this')
stateCopy.upVotes += 1;
ref.child('items').child(this.props.keyNum).child('upVotedBy').push({
upVotedBy: userKey
}, function(error){
if(error){
console.log('push error: ' + error)
}
})
console.log(stateCopy.upVotedBy)
this.fb.update(stateCopy);
}
}.bind(this))
} else {
console.log('must be logged in to upvote')
}
},
你能展示数据在firebase中的外观吗?我无法真正知道你是如何从单独的代码构建数据的。 –
@AndréKool当然可以。添加 –
因此,用户只需循环遍历所有项目,并检查他是否已上传该项目?而你的问题是,当用户a已经upvoted该项目用户b不能upvote它?对不起,如果我问很多,我还没有足够的咖啡:P –