无法从Web应用程序在Firestore中添加文档,也不会返回错误

时间:2019-08-29 22:27:49

标签: firebase google-cloud-firestore

突然,我向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部署”,发现所部署的版本能够编写新文档。我的本地主机版本仍然无法编写它们。好奇怪所以我已经找到了解决方案的一半。所有想法都欢迎您对本地计算机上发生的事情进行停止写操作...

1 个答案:

答案 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
  });