Javascript / Firestore: Uncaught (в обещании) TypeError: firebase.firestore (...). Collection (...). Do c (...). Collection (...). Set не является функцией - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь закодировать простую форму, которая получает один пользовательский ввод, а остальные являются константными переменными, которые устанавливают (создают) новый поддокумент в существующем документе. В настоящее время мне выдается ошибка:

Uncaught (в обещании) TypeError: firebase.firestore (...). Collection (...). Do c (...). коллекция (...). набор не является функцией

Вот код:

                    <form id="bgForm" method="POST">
                        <div class="wrap-input100 validate-input m-t-25 m-b-35" data-validate="Enter blood glucose">
                            <h5>Update Blood Glucose</h5>
                            <font face="Montserrat">Input Blood Glucose: </font>
                            <input class="input100" type="text" name="inputBloodGlucose" style="font-family:Montserrat;" id="inputBg" required />
                            <button type="submit" class="btn btn-primary" id="updateBG">Update Blood Glucose</button>
                            </form>
                                <script>
                                    (function(){
                                        //Update BG
                                        $('#bgForm').on('submit', async function (e) {
                                            e.preventDefault();
                                            var data = {
                                            bgReading: parseInt($('#inputBg').val()), //get bg int
                                            dateAdded: firebase.firestore.Timestamp.fromDate(new Date()),
                                            isActive: true,
                                            };
                                            firebase.auth().onAuthStateChanged(function(user){
                                                if(user){
                                                    this.userId = user.uid; //stores the userid
                                                }
                                                firebase.firestore().collection("users").doc(userId).collection("glucose").set({
                                                    'bgReading': data.bgReading, 'dateAdded': data.dateAdded, 
                                                    'isActive': data.isActive,
                                                })
                                                .then(function(){
                                                    window.alert("Blood Glucose updated!");
                                                    // window.location.href = "diabetesManagement.php"; 
                                                })
                                                .catch(function(error){
                                                    console.log("Error updating blood glucose", error);
                                                    window.alert("Error updating blood glucose" + error);
                                                });
                                               });
                                            });
                                        })();
                                </script>
                        </div>

Я использую

firebase.auth().onAuthStateChanged(function(user){ 
if(user){this.userId = user.uid;}

Чтобы получить uid текущего зарегистрированного пользователя и затем сохранить его в переменной. Могу ли я не использовать этот код для выполнения запросов? Потому что это единственная вещь, на которую я сейчас опираюсь, как причина, по которой в меня бросают ошибку.

1 Ответ

2 голосов
/ 01 февраля 2020

Измените это:

firebase.firestore().collection("users").doc(userId).collection("glucose").set({
                                                    'bgReading': data.bgReading, 'dateAdded': data.dateAdded, 
                                                    'isActive': data.isActive,
                                                })

На это:

firebase.firestore().collection("users").doc(userId).collection("glucose").add({
                                                    'bgReading': data.bgReading, 'dateAdded': data.dateAdded, 
                                                    'isActive': data.isActive,
                                                })

В CollectionReference нет метода set, вам нужно использовать add, который добавит новый документ с переданными данными.

https://firebase.google.com/docs/reference/js/firebase.firestore.CollectionReference.html#add

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...