Условное условие where в запросах firestore на основе параметров - PullRequest
0 голосов
/ 22 января 2019

Например, у меня есть динамический список фильтров для моего списка продуктов, из этого списка фильтров отправьте запрос https в облачную функцию.затем пытается установить несколько условных выражений where из этого запроса

нескольких условных выражений where, которые работают в локальном приложении firebase, но не внутри облачной функции - Обновить код -

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import { Query } from "@google-cloud/firestore"; // update code
const cors = require("cors")({
  origin: true
});
admin.initializeApp();

const settings = { timestampsInSnapshots: true };
admin.firestore().settings(settings);

const database = admin.firestore();

export const getProduct = functions.https.onRequest(
  (request, response) => {
    return cors(request, response, async () => {
      try {
        let productRef = database.collection("product") as Query; // update code
        if(request.query.brand){
          productRef =productRef.where("brand", "==", request.query.brand)
        }
        if(request.query.lifeStyle){
          productRef =productRef.where("lifeStyle", "==", request.query.lifeStyle)
        }
        const productsQuery = await productRef.get();

        const products = productsQuery.docs.map(
          docRef => ({
            id: docRef.id,
            ...docRef.data()
          })
        );
        response.status(200).send(products);
      } catch (error) {
        response.status(500).send(error);
      }
  });
 }
);

после отображения компиляцииошибка на консоли [ts] Тип «Запрос» не может быть назначен типу «CollectionReference».[2322]

1 Ответ

0 голосов
/ 22 января 2019

TypeScript жалуется, что вы пытаетесь изменить тип productRef.Сначала вы присваиваете productRef с результатом вызова collection().Из связанных документов API видно, что он возвращает объект типа CollectionReference .Затем вы пытаетесь переназначить productRef с результатом вызова на where(), который возвращает другой тип Query .TypeScript не любит, когда вы меняете типы переменных.

Поскольку CollectionReference является подклассом Query, вы можете вместо этого просто сказать TypeScript, что вы хотите работать с productRef как с Query все время:

let productRef = database.collection("product") as Query

Обратите внимание на приведение к Query здесь.

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