javascript - Firebase JS - Firebase 无法插入 firestore

标签 javascript firebase web google-cloud-firestore

我使用纯 Javascript 将文档插入 firestore 集合中,无需身份验证。 读取实时数据功能应该没有问题,但插入文档似乎不起作用。 这里出了什么问题?

这是控制台输出:

firebase-firestore.js:1 Uncaught TypeError: o.indexOf is not a function at Function.hi.q (path.ts:227) at Qd.doc (database.ts:2217) at createDoc (firebase.js:26) at HTMLFormElement.onsubmit (board.html:83)

我通过获取按钮的元素 ID 并提交点击,尝试了 JavaScript 中的另一种 onClick 方法,这是我得到的控制台日志:

VM1764 firebase-firestore.js:1 Uncaught TypeError: o.indexOf is not a function at Function.hi.q (VM1764 firebase-firestore.js:1) at Qd.doc (VM1764 firebase-firestore.js:1) at createDoc (VM1765 firebase.js:26) at HTMLButtonElement.document.getElementById.onclick (VM1765 firebase.js:17)

这是 JS 后跟 HTML:

//config
var firebaseConfig = {
    apiKey: "...",
    authDomain: "...",
    databaseURL: "...",
    projectId: "...",
    storageBucket: "...",
    messagingSenderId: "...",
    appId: "...",
    measurementId: "..."
};

firebase.initializeApp(firebaseConfig);
firebase.analytics();

document.getElementById("postBtn").onclick = function() { createDoc() };

//insertion
function createDoc() {
    var usernameInput = document.getElementById("username_input").value;
    var jobTitleInput = document.getElementById("job_input").value;
    var timestampInput = Date.now();

    firebase.firestore().collection("humans").doc(Date.now()).set({
        job: jobTitleInput,
        timestamp: timestampInput,
        username: usernameInput,
    }).then(function() {
        console.log('document inserted');
        document.getElementById("data_section").innerHTML = '';
        fetchAllThreadsByTimestamp();
    }).catch(function(error) {
        console.error('document insertion error: ' + error);
    });
}
<form class="form">
                            <div class="row">
                                <div class="col-xs-8 col-md-10 ">
                                    <input type="text" id="username_input" placeholder="username" required/>
                                </div>
                            </div>
                            <br>
                            <div class="row ">
                                <div class="col-xs-8 col-md-10 ">
                                    <input type="text" id="job_input" placeholder="job title" required/>
                                </div>
                                <div class="col-xs-4 col-md-2">
                                    <button id="postBtn" class="btn">POST</button>
                                </div>
                            </div>
                        </form>

最佳答案

Firebase 很可能在您使用的文档 ID 上出错。

.doc(Date.now())

在这一行中,Date.now() 是一个数字,但文档 ID 应始终是字符串。


一般来说,无论如何使用时间戳作为文档 ID 都不是一个好主意,因为它们不能保证唯一。如果您需要分配唯一的文档 ID,Firebase 可以为您完成,如果您使用:

firebase.firestore().collection("humans").add({ /* ... */ }).then(function(doc){
    // ...
    // note: you can get the new document ID by using doc.id
}).catch(function(error) {
    // ...
});

(relevant docs)

关于javascript - Firebase JS - Firebase 无法插入 firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64593545/

相关文章:

javascript - 为第一个值添加 cookie 和未定义值

javascript - 等到 Firebase 读取列表完成后再返回记录数组

javascript - 有什么方法可以检测用户是否从本地存储中删除了任何项目

html - 如何为按钮添加 css 填充,使其与列宽一致?

javascript - ReactJS:帮助调试?每个数组非列的总和

javascript - 使用 multer 上传 NodeJS 文件

javascript - 如何让 Firebase 函数从另一个目录中找到 index.js?

javascript - 在 ReactJS 中实现振动

javascript - 如何等待两个异步函数结束?

javascript - 如何使用 ionic 和 firebase 获取注册用户的 uid