Спецификация Firestore c чтение данных не работает с переменной, но работает со значением stati c - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь запросить указанный c документ из базы данных firestore. Кажется, проблема в том, что если я добавляю doc(id) статически, это работает, но с переменной у него даже нет, хотя переменная имеет правильное и точное значение, которое я статически проверял.

Документ, который я пытаюсь retrieve - это User узел / документ в коллекции /users.

read - это функция, которую я использую для извлечения данных:

export default class GenericDB {
    constructor(collectionPath) {
      this.collectionPath = collectionPath
    }
    /**
       * Read a document in the collection
       * @param id
    */
    async read(id) {
      const result = await (await firestore())
        .collection(this.collectionPath)
        .doc(id)
        .get()

      const data = result.exists ? result.data() : null

      if (isNil(data)) return null

      this.convertObjectTimestampPropertiesToDate(data)
      return { id, ...data }
    }
}

Это мое действие vuex:

getUser: ({ commit }, userId) => {
    return new Promise((resolve, reject) => {
        //usin UsersDB() instead of Generic() because my UsersDB() has constructor with correct path to /users
        new UsersDB().read(userId).then(user => {
            //Empty user if userId value is from variable and not empty if I use static value
            resolve(user)
        })
    })
}

И я выкрикиваю это:

mounted() {
  if (this.id) {
      //getUser function is declared inside ...mapActions('authentication', ['getUser'])
      this.getUser(this.id)
  }
}

Обновление 1: Я сравнил строку stati c с моей переменной с помощью логического оператора, и это Оказывается, переменная userId имеет пробел в конце. Я понятия не имею, почему и где это происходит.

Нет ошибки, просто пустые данные. Я не вижу, что может быть не так с этим простым запросом. Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 24 января 2020

Попробуйте установить соединение таким образом, а не напрямую.

const db = firebase.firestore();
async function read(id) {
    const result = await db
        .collection(this.collectionPath)
        .doc(id)
        .get()

    const data = result.exists ? result.data() : null

    if (isNil(data)) return null

    this.convertObjectTimestampPropertiesToDate(data)
    return { id, ...data }
}

Обычно стандартный формат, который мы обычно используем для получения документов:

const db = firebase.firestore();

const result = await db
    .collection("collection_name")
    .doc("document_id")
    .get();

Надеюсь, это вам поможет. Пожалуйста, дайте мне знать о любых проблемах.

После того, как вы отредактировали вопрос, я попытался передать допустимую переменную, и я получил ответ. Это дает мне данные документа.

//Firebase
const admin = require("firebase-admin");
let serviceAccount = require("./firebase.json");
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});
let db = admin.firestore();
//End of Firebase

id = "lWxkvqZnBxNRke4SFyJj"
async function getData(id) {
    const result = await db
        .collection("users")
        .doc(id)
        .get();

    data = result.data()
    console.log(data)
    return data
}
getData(id)
0 голосов
/ 24 января 2020

Оказалось, что идентификатор пользователя не был точно таким же, если бы я сравнил их с логическим оператором. Версия переменной имела пробел в конце.

Таким образом, решение было использовать userId.replace(/\s/g, '')

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