我有一个带有“聊天室”集合的消防站;我使用Firestore模拟器插入新文档,并且希望在firebase cloud functions emulator上本地运行onWrite
时(通过运行index.js
来调用firebase emulators:start
触发器,但从未如此。
我知道该模拟器已连接到正确的Firestore模拟器,因为我可以读取数据(见下文),但是我无法获取要调用的触发器。
// My setup:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
// We are able to fetch a document correctly, meaning at least my
// cloud functions emulator is hooked up to the firestore emulator!
admin.firestore().collection("chats").doc("eApXKLLXA4X6tIJtYpOx").get()
.then(doc => {
if (doc.exists) {
console.log("Document data:", doc.data()); // <- this works!!
} else {
throw new Error("No sender document!");
}
})
// This never gets called when I insert a new document through the emulator UI!
exports.myFunction = functions.firestore
.document('chats/{chat-id}')
.onWrite((change, context) => { console.log("on write") });
答案 0 :(得分:1)
尝试将文档选择器从chats/{chat-id}
更改为chats/{chatId}
。看起来-
符号在这里被禁止。如果使用它,则会在firebase-debug.log
中收到以下错误:
[debug] [2020-06-01T12:17:29.924Z] 2020年6月1日,下午com.google.cloud.datastore.emulator.impl.util.WrappedStreamObserver onError 信息:操作失败:无效的模式。原因:[69:-]捕获表达式的末尾应为'}'。
另一个原因可能是使用了错误的项目ID,但事实并非如此。 参见:Firestore triggers of cloud functions in emulator are ignored