Firebase Firestore查询似乎不适用于React

时间:2019-12-11 14:34:52

标签: reactjs firebase google-cloud-firestore axios

我已经花了6个小时来解决这个问题,但仍然无法解决这个问题。我正在尝试通过Firestore按订单状态查询订单。但是由于某种原因,当我在其中添加.where时,该功能不起作用。我已经尝试过查询其他字段,但也不行。

exports.getOrderHistory = (req, res) => {
  return db
     .collection('orders')
     .where('orderStatus', '==', "Active")  //this line doesnt work 
     .orderBy('createdAt', 'desc')
     .get()
     .then((data) =>{
         let orders =[];
         data.forEach((doc)=>{
          orders.push(doc.data()

             );
         })
         return res.json(orders)
     })
     .catch((err) =>{
        console.error(err)
        res.status(500).json({error:err.code})
    })
}

但是,我已经使用它来从“用户”集合中获取身份验证令牌,并且可以正常工作。

  let idToken;
  if (
    req.headers.authorization &&
    req.headers.authorization.startsWith("Bearer ")
  ) {
    idToken = req.headers.authorization.split("Bearer ")[1];
  } else {
    console.error("No token found");
    return res.status(403).json({ error: "Unauthorised" });
  }

  admin
    .auth()
    .verifyIdToken(idToken)
    .then(decodedToken => {
      req.user = decodedToken;
      return db
        .collection("users")
        .where("userId", "==", req.user.uid) // it works fine here
        .limit(1)
        .get();
    })
    .then(data => {
      req.user.handle = data.docs[0].data().handle;
      return next();
    })
    .catch(err => {
      console.err("Error while verifying token", err);
      return res.status(403).json(err);
    });
};

2 个答案:

答案 0 :(得分:0)

  

来自文档

     

orderBy()子句还过滤给定字段的存在。的   结果集将不包含不包含给定文档的文档   字段。

     

您的按字段排序是否可能为空?

     

/u/pagerussell

答案是在reddit上交叉发布的,可以在此处找到

https://www.reddit.com/r/Firebase/comments/e97yon/firestore_query_doesnt_work/fah4hsx?utm_source=share&utm_medium=web2x

答案 1 :(得分:0)

确保您的规则与您的查询相匹配。换句话说,如果您要添加“where”,您也必须在规则中提及它。我知道这是一个老问题,但我只是为了以防万一,它可能会帮助其他人。