我使用algolia作為我firebase應用程序的full-text搜索,我能夠通過firebase-cloud-functions創建和刪除索引,但為了更新,我嘗試了以下功能,但沒有成功:
//* 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(),
})
})
但它不起作用,當我部署函數“屬性'id'在類型'Change<QueryDocumentSnapshot>上不存在”時,它給出了一個錯誤
這個錯誤與Algolia無關。它由TypeScript拋出,因為您試圖訪問
onUpdate
firestore觸發器中的snap.id
。查看API參考(https://firebase.google.com/docs/reference/functions/providers_firestore.documentbuilder.html#onupdate)可以看到,傳遞給回調函數的第一個參數的類型是
Change<DocumentQuerySnapshot>
。Change將泛型類型(在本例中為DocumentQuerySnapshot
)用于其before
和after
屬性。Change
類型本身沒有屬性id
。因此,試著像這樣訪問它:
snap.after.id
。