首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端SDK和Admin在防火墙查询中的差异

客户端SDK和Admin在防火墙查询中的差异
EN

Stack Overflow用户
提问于 2019-02-10 15:37:35
回答 1查看 249关注 0票数 0

在Firebase函数中运行查询时,我无法让它工作。它在客户端工作得很好,但在功能上却不太好。想知道是否有一种方法可以让它与Admin一起工作。我在我的问题上做了什么可怕的错事?

Params:

代码语言:javascript
复制
searchQuery = {
  start:
    "[native Date Fri Feb 08 2019 00:00:00 GMT+0200 (Itä-Euroopan normaaliaika)]",
  end:
    "[native Date Fri Feb 08 2019 23:59:59 GMT+0200 (Itä-Euroopan normaaliaika)]",
  cafeIds: ["LI088001"],
  textSearch: "",
  time: { time: "00-24", label: "Kokopäivä" }
}

sort = {
  "column": "created",
  "value": "asc"
}

查询:

代码语言:javascript
复制
let ref = firestoreDB.collection('events')
ref = ref.where('created', '>=', searchQuery.start).where('created', '<=', searchQuery.end)

for (const cafe of searchQuery.cafeIds) {
  ref = ref.where('cafeId', '==', cafe)
}

ref = ref.where(`time.${searchQuery.time.time}`, '==', true)

if (searchQuery.textSearch !== '') {
  ref = ref.where(
    'products.',
    'array-contains',
    lowerCase(searchQuery.textSearch)
  )
}

if (sort.field === 'created') {
  ref = ref.orderBy('created', sort.value)
} else if (sort.field === 'productCount') {
  ref = ref
    .orderBy('created', 'asc')
    .orderBy('productCount', sort.value)
} else if (sort.field === 'total') {
  ref = ref
    .orderBy('created', 'asc')
    .orderBy('total', sort.value)
} else {
  ref = ref.orderBy('created', 'asc').orderBy('eventId', 'asc')
}
const query = await ref.limit(10).get()

当将相同的代码应用于用类型记录编写的函数时,我会看到以下错误:

代码语言:javascript
复制
src/storage/exportCsv.f.ts:25:5 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.
  Property 'id' is missing in type 'Query'.

25     ref = ref.where('created', '>=', searchQuery.start).where('created', '<=', searchQuery.end)
       ~~~

src/storage/exportCsv.f.ts:28:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

28       ref = ref.where('cafeId', '==', cafe)
         ~~~

src/storage/exportCsv.f.ts:31:5 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

31     ref = ref.where(`time.${searchQuery.time.time}`, '==', true)
       ~~~

src/storage/exportCsv.f.ts:34:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

34       ref = ref.where(
         ~~~

src/storage/exportCsv.f.ts:42:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

42       ref = ref.orderBy('created', sort.value)
         ~~~

src/storage/exportCsv.f.ts:44:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

44       ref = ref
         ~~~

src/storage/exportCsv.f.ts:48:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

48       ref = ref
         ~~~

src/storage/exportCsv.f.ts:52:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

52       ref = ref.orderBy('created', 'asc').orderBy('eventId', 'asc')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-10 16:04:48

看起来您在Admin中遇到了一些TypeScript错误。所以,要么您没有在客户端JavaScript中使用JavaScript,要么服务器上的编译器更加严格。无论是哪种方式,您都需要解决每个问题,或者在云函数中切换到使用普通的JavaScript。

有很多错误,但最常见的错误似乎是:

输入'Query‘不能分配到键入'CollectionReference’。 28 ref = ref.where('cafeId',‘=’,咖啡馆)

首先在这里定义ref

代码语言:javascript
复制
let ref = firestoreDB.collection('events')

因为collection('events)返回一个CollectionReferenceref就变成了这种类型。然后,当您稍后尝试将ref.where('cafeId', '==', cafe)分配给它时,它的类型是Query (CollectionReference的祖先)。这是一个类型错误。

解决方案是立即将ref类型为Query

代码语言:javascript
复制
let ref: Query = firestoreDB.collection('events')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54618027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档