最初收到FirebaseError:函数Query.where()需要一个有效的第三个参数,但未定义。但是可以刷新

时间:2019-06-28 15:15:15

标签: javascript node.js firebase google-cloud-firestore next.js

我正在使用node.js和用于SSR的next.js框架以及firebase / firestore作为数据库来构建一个电子商务网站。

我已经成功地使网站从显示所有可用产品的视图中获取数据并从firestore中显示数据。现在,我希望能够单击某个产品,并转到一个单独的产品页面,其中显示该产品的额外信息和选项。我使用已分配产品的唯一SKU编号作为参考,以从Firestore获取正确的数据。

但是,当单击该项目并重定向到该页面时,我不断收到错误信息,即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来检索文档。

关于如何通过仅将返回的对象分配给单个变量并使用自动分配的Firestore ID来改进此代码的任何建议都将非常有用!抱歉,我是javascript / node.js n00b:)

0 个答案:

没有答案