Am使用algolia作为我的firebase应用程序的全文搜索,我能够通过firebase云功能创建和删除索引,但要更新,我尝试过,但没有成功,以下是功能:
//* am using Typescript
const env = functions.config()
const client = algoliasearch(env.algolia.app_id, env.algolia.admin_api_key)
const index = client.initIndex('Products')
//the function to create index
export const onProductCreated = functions.firestore
.document('Products/{productId}')
.onCreate((snap, ctx) => {
return index.saveObject({
objectID: snap.id,
...snap.data(),
})
})
//the function to delete index
export const onProductDeleted = functions.firestore
.document('Products/{productId}')
.onDelete((snap, ctx) => {
return index.deleteObject(snap.id)
})
然后为了更新它,我尝试了的功能
export const onProductCreated = functions.firestore
.document('Products/{productsId}')
.onUpdate((snap, ctx) => {
return index.partialUpdateObject({
objectID: snap.id,
...snap.data(),
})
})
但它没有起作用,当我部署函数"时,它给出了一个错误;类型"Change<"上不存在属性"id";QueryDocumentSnapshot>'">
该错误与Algolia无关。它是由TypeScript引发的,因为您正试图访问onUpdate
firestore触发器中的snap.id
。
查看API参考资料(https://firebase.google.com/docs/reference/functions/providers_firestore.documentbuilder.html#onupdate)您可以看到,传递给回调函数的第一个参数的类型是Change<DocumentQuerySnapshot>
。Change为其before
和after
属性使用泛型类型(在本例中为DocumentQuerySnapshot
(。Change
类型本身没有属性id
。
因此,尝试这样访问它:snap.after.id
。