突然,我向Firestore添加新文档的代码无法正常工作,并且未返回错误。我以为这可能是网络问题,但是身份验证和创建新用户的工作正常。我的网络连接也很牢固。
[EDIT]我已打开调试模式,并使用documentChange请求和正确的数据字段对Firestore进行了调用。但是,永远不会创建该文档。我正在使用最新的Firestore版本。
我尝试将此简化添加到我的收藏夹中:
firebase.firestore().collection('biff').add({
boff: 0,
baff: 5
}).catch(function(error) {
console.error('There was an error uploading a file to Cloud Storage:', error);
});
这是我的安全规则:(我也尝试过完全公开写作)
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
没有错误消息生成,并且新文档永远不会出现在我的收藏夹中。我可以进行身份验证并创建新用户。身份验证是否可能有效,但我的Firebase SDK却以某种方式认为没有与Firestore的连接,因此它对文档进行排队?
[更新]我注意到前端的早期Alpha版本仍然能够编写新文档。当我列出项目时,firebase在CLI中知道了它列出了一个较旧的firebase项目。因此,我做了“ firebase使用--add”并选择了新的firebase项目,然后进行了“ firebase初始化”以重置除index.html之外的所有内容。然后,我进行了“ firebase部署”,发现所部署的版本能够编写新文档。我的本地主机版本仍然无法编写它们。好奇怪所以我已经找到了解决方案的一半。所有想法都欢迎您对本地计算机上发生的事情进行停止写操作...
答案 0 :(得分:0)
一旦我使用按钮而不是表单提交来触发带有document.add的例程,那么所有这些都可以在本地主机,服务器和移动设备上使用。在不完整的版本中,表单将继续处理,并将用户留在主视图中,该状态为该URL及其后的所有URL都附加了一个参数(?topic = Business)。从那时起,document.add将不再起作用。现在,通过移动到按钮并使用e.preventDefault,它每次都可以使用,并且所有网址都保持清晰。 (不知道为什么这种副作用会在Firestore中添加)
var postOfferElement = document.getElementById('postoffer');
postOfferElement.addEventListener('click', function(e) {
e.preventDefault();
saveOffer();
});
在saveOffer中:
firebase.firestore().collection('offers').add({
created: firebase.firestore.FieldValue.serverTimestamp(),
owner: getUserID(),
name: getUserName(),
pic: getProfilePicUrl(),
completes: 0,
favs: 0,
offer: offerText,
topic: topicText,
exp: expText
});