Приложение Svelte может читать базу данных Firebase, но не добавлять - PullRequest
0 голосов
/ 23 марта 2020

Привет сообщество stackoverflow. Я делаю простое приложение для баз данных, используя Svelte, Materialize CSS и firebase. Я могу читать из базы данных firebase, поэтому знаю, что это не проблема с учетными данными, однако при использовании функции addLink, приведенной ниже, база данных не обновляется. Предупреждения показывают дату и строку newLink также правильно. Код в контексте также ниже.

function addLink() {
    alert(date.getTime());
    db.collection("links").add({ link: newLink, id: date.getTime() });
  }
<script>
  import GetForm from "../layout/GetForm.svelte";
  import TranslateButton from "../layout/TranslateButton.svelte";
  import { db } from "../firebase.js";

  let arrList = [];
  let newLink = "";
  let date = new Date();

  db.collection("links")
    .orderBy("id", "asc")
    .onSnapshot(snapData => {
      arrList = snapData.docs;
    });

  function addLink() {
    alert(date.getTime());
    db.collection("links").add({ link: newLink, id: date.getTime() });
  }
</script>

<div class="container right-align" style="margin-top: 30px;">
  <TranslateButton />
</div>
<div class="container" style="margin-top: 150px;">
  <div class="row">
    <div class="center-align">
      <div class="row">
        <form class="col s12">
          <div class="row">
            <div class="input-field col s10">
              <textarea
                id="textarea1"
                class="materialize-textarea"
                bind:value={newLink} />
              <label for="textarea1">Put your URL here.</label>
            </div>
            <button
              class="btn waves-effect waves-light col s2"
              on:click={addLink}>
              Send
              <i class="material-icons right">arrow_forward</i>
            </button>
          </div>
        </form>
      </div>
    </div>
  </div>
  <div class="row">
    <div class="center-align">
      <GetForm />
    </div>
  </div>

  <ul>
    {#each arrList as listItem}
      <li>{listItem.data().link}</li>
    {/each}
  </ul>

</div>

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Добавление новой записи в Firestore DB

Какой учебник вы используете для Firebase? Это не то, как вы добавляете данные в firebase. Замените add() на set()

Для автоматически сгенерированного идентификатора

Передавайте ничего в качестве аргумента doc()

// For automatically generated id
db.collection('links')
  .doc()
  .set({ link: newLink })  
  .then(() => {  // fetch the doc again and show its data
    ref.get().then(doc => {
        console.log(doc.data())  // prints {link: newLink, id: 1321415}
    })
  })

Для использования собственного идентификатора

Передайте id в качестве аргумента doc()

// Or you could set your own id, which is in your case,
// Pass your `id` as argument for `doc()`
db.collection("links")
  .doc(date.getTime())
  .set({
    link: newLink
  })

Добавить данные в Cloud Firestore

0 голосов
/ 23 марта 2020

Согласно официальной документации Установить документ указывает, что вам нужно использовать метод set() для добавления документов в вашу коллекцию. Одним из примеров вставки в базу данных является следующее - документация находится в Node.js, но я считаю, что это должно помочь вам в качестве отправной точки.

let data = {
  link: 'Link you want',
  id: 'Id you want'
};

let setDoc = db.collection('link').doc('Id').set(data);

Это всего лишь простой пример добавления документ в коллекцию, но он должен помочь вам понять логи c для вашего.

Кроме того, в следующих статьях вы должны получить больше информации о том, как выполнять запросы в Firestore.

Дайте мне знать, помогла ли вам информация!

...