Первоначально получить FirebaseError: Функция Query.where () требует допустимого третьего аргумента, но он не был определен. но потом работает на обновление - PullRequest
0 голосов
/ 28 июня 2019

Я создаю сайт электронной коммерции, используя node.js с инфраструктурой next.js для SSR и firebase / firestore в качестве базы данных.

Я успешно заставил сайт получать данные и отображать данные из firestoreНа мой взгляд, это показывает все доступные продукты.Теперь я хочу иметь возможность щелкнуть продукт и перейти на отдельную страницу продукта, где он отображает дополнительную информацию + параметры продукта.Я использую уникальный номер SKU, которому я назначил продукты для справки, чтобы получить правильные данные из пожарного магазина.

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

Я использовал 'await', чтобы получить stringSKU до того, как обещание произойдет, и запись в консоль до того, как обещание произойдет, даст правильное значение.Вот мой код.


export default class Product extends React.Component {

  static async getInitialProps(context) {
     const obj = await context.query;
     const stringSKU = await obj.SKU

     //Displays the correct string value
     console.log(stringSKU)

    let firebase= await loadFirebase()


    let result = await new Promise((resolve, reject) => 
    {

      //this is where the error occurs
      firebase.firestore().collection('products')
      .where('SKU','==',stringSKU)
      .get()
      .then((snapshot) =>{

          let data = []
          snapshot.forEach((doc) => {data.push(Object.assign({id: doc.id }, doc.data())) })

          resolve(data)
      })

      .catch(error => { 
         reject([])
      })
    })

     return {products: result}

  }

Кроме того, поскольку я пытаюсь извлечь только один элемент из базы данных Firebase, я чувствую, что использование forEach и помещение элемента в массив не лучший способ сделать это, и при этомиспользуя SKU для получения документов.

Любые предложения о том, как улучшить этот код, просто присваивая возвращаемый объект одной переменной и используя автоматически назначенный идентификатор пожарного хранилища, были бы великолепны!Извините, я javascript / node.js n00b:)

...